基本运算符和表达式
运算符的类型、优先级和关联性
C 中的运算符和表达式的数量在高级语言中很少见。正是丰富的运算符和表达式使C语言的功能非常完整。这是 C 语言的主要特点之一。
C语言的运算符不仅有不同的优先级,而且还有一个特点,就是它的结合性。在一个表达式中c语言的运算符优先级,每个操作数参与运算的顺序不仅要符合运算符优先级的规则,而且还要受到运算符的结合性的约束,从而确定运算是从左到右还是从左到右进行。右到左。这种关联性在其他高级语言的运算符中是找不到的,因此增加了 C 语言的复杂性。
运算符的种类 C语言中的运算符可以分为以下几类:
1.算术运算符
用于各种数值运算。包括加法(+)、减法(-)、乘法(*)、除法(/)、余数(或模运算c语言的运算符优先级,%)、自增(++)、自减(–)共七种。
2.关系运算符
用于比较操作。包括大于(>)、小于(=)、小于等于(>=,i,i+1–>i,i+1–>i
j+1->j,j+1->j,j+1->j,j+j+j->q int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
在这个程序中,P=(i++)+(i++)+(i++)应该理解为三个i相加,所以P的值为15。然后i加13倍,等价加上 3,所以 i 的最终值为 8。对于 q 的值,情况并非如此。 q=(++j)+(++j)+(++j)应该理解为q先加1,然后参与运算。由于 q 以 1 为增量 3 次,值为 8,三个 8 的和为 24,j 的最终值仍为 8。 算术表达式 表达式是组合常量、变量、函数和运算符的表达式。表达式有一个值和它的类型,它们等于表达式计算结果的值和类型。表达式求值按运算符优先级和关联性规定的顺序进行。单个常量、变量或函数可以看作是表达式的一种特殊情况。
算术表达式
它是一个由算术运算符和括号连接的表达式。下面是一个算术表达式的例子:
a+b (a*2)/c(x+r)*8-(a+b)/7++isin(x)+sin(y) (++i)-(j++ )+(k–)
赋值运算符和赋值表达式
简单的赋值运算符和表达式,简单的赋值运算符记为“=”。用“=”连接的表达式称为赋值表达式。它的一般形式是:变量=表达式示例:
x=a+b
w=sin(a)+sin(b)
y=i+++–j 赋值表达式的作用是计算表达式的值,赋值给左边的变量。
赋值运算符是右结合的。因此:
a=b=c=5
可以理解
a=(b=(c=5))
在其他高级语言中,赋值构成一个称为赋值语句的语句。在 C 中,“=”被定义为构成赋值表达式的运算符。赋值表达式可以出现在任何可以出现表达式的地方。比如公式x=(a=5)+(b=8)是合法的。它的意思是把5赋给a,8赋给b,然后将a和b相加,并赋和到 x ,所以 x 应该等于 13。
赋值语句也可以用 C 语言形成。根据 C 语言,任何以分号结尾的表达式都构成一个语句。因此,如x=8; a=b=c=5;是赋值语句,我们在前面的示例中广泛使用。
如果赋值运算符两边的数据类型不同,系统会自动进行类型转换,即将赋值号右边的类型替换为左边的类型。具体规定如下:
1.Real 被分配给一个整数,省略小数部分。前面的例子 2.9 已经说明了这种情况。
2.整数类型赋值给实数类型,值不变,但会以浮点形式存储,即加小数部分(小数部分的值部分是 0)。
3.字符类型被赋值为整数类型。由于字符类型为1字节,整数类型为2字节,所以字符的ASCII码值放在整数的低八位,高八位为0。
4.整数类型赋值给字符类型,字符量只赋值低八位。
void main(){
int a,b=322;
浮点 x,y=8.88;
char c1=’k’,c2;
a=y;
x=b;
a=c1;
c2=b;
printf(“%d,%f,%d,%c”,a,x,a,c2);
}
int a,b=322;
浮点 x,y=8.88;
char c1=’k’,c2;
printf(“%d,%f,%d,%c”,a=y,x=b,a=c1,c2=b);
这个例子展示了上述赋值操作中的类型转换规则。 a是一个整数,只有在给实值y赋值888之后才取整数8。 x 为实数类型,整数 b 值被赋值为 322,后跟小数部分。将字符类型值c1赋值a变为整数类型,将整数类型值b赋值给c2然后取其低八位变为字符类型(b的低八位为01000010,即十进制66,根据ASCII码对应字符B)。
复合赋值和表达式
在赋值运算符“=”之前添加其他二元运算符,形成复合赋值运算符。比如
+=,-=,*=,/=,%=,=,&=,^=,|=.构成复合赋值表达式的一般形式为:variable binary operator=expression 等价于 variable=variable operator expression 例如:
a+=5 等价于 a=a+5
x*=y+7 等价于 x=x*(y+7)
r%=p 等价于 r=r%p
写法
复合赋值运算符初学者可能不会用到,但是对编译处理很有好处,可以提高编译效率,生成高质量的目标代码。逗号运算符和逗号表达式在
逗号运算符
逗号“,”在C语言中也是一个运算符,称为逗号运算符。它的作用是将两个表达式连接成一个表达式,称为逗号表达式。
一般形式为:表达式1,表达式2 求值过程是分别求出两个表达式的值,将表达式2的值作为整个逗号表达式的值。
void main(){
int a=2,b=4,c=6,x,y;
y=(x=a+b),(b+c);
printf(“y=%d,x=%d”,y,x);
}
斧头
在这个例子中,y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。关于逗号表达式还有两点需要注意:
1.一般形式的逗号表达式表达式1和表达式2也可以是逗号表达式。例如: expression1, (expression2, expression3) 形成一个嵌套的 case。所以逗号表达式可以展开为如下形式: expression1, expression2, …expressionn 整个逗号表达式 公式的值等于表达式 n 的值。
2.逗号表达式用于程序中。通常,逗号表达式中的每个表达式的值是单独需要的,但整个逗号表达式的值不一定是必需的。
3. 并非所有的逗号表达式都形成逗号表达式。例如,在变量声明中,函数参数表中的逗号仅用作变量之间的分隔符。
[练习] //算术int a,b,c;
浮点数;
a=11;
b=235;
c=a+b-a*b;
d=(float)c/(float)a;
a=c/a;’Vtable
a,2,0
b,2,0
c,2,0
d,4,0.0
Vtable
‘更新
1,0;2,0;3,0
4,0.0
1,11
2,235
3,-2339
4,-212.636368
1,-212
Vupdate
实践
[练习] //1int a,b,c1,c2;
a=25;
b=3243;
c1=b/a;
c2=b%a;’Vtable
a,2,0
b,2,0
c1,2,0
c2,2,0
Vtable
‘更新
1,0;2,0;3,0;4,0
1,25
2,3243
3,129
4,18
Vupdate
实践
[练习] //1int a,b,c;
a=25;
b=40;
c=a+b,c+35;’Vtable
a,2,0
b,2,0
c,2,0
Vtable
‘更新
1,0;2,0;3,0
1,25
2,40
3,65
Vupdate
实践
总结
1.C 数据类型
基本类型、构造类型、指针类型、空类型
2.基本类型的分类及特点
类型说明符字节值范围
字符类型 char1 C 字符集
基本整数 int 2 -32768~32767
短整数2 -32768~32767
long型long int 4 -214783648~214783647
无符号类型 unsigned2 0~65535
无符号长整数 unsigned long 4 0~4294967295
单精度实浮点数4 3/4E-38~3/4E+38
双精度实型 double 8 1/7E-308~1/7E+308
3.常量后缀
L 或 L 长
U 或 u 无符号数
F 或 f 浮动
4.常量类型
整数、长整数、无符号、浮点数、字符、字符串、符号常量、转义字符。
5.数据类型转换
·自动转换
在不同类型数据的混合操作中,系统自动实现从小字节类型到多字节类型的转换。不同类型的量相互赋值时,系统也会自动转换,赋值号右侧的类型转换为左侧的类型。
·强制转换
转换由强制转换运算符完成。
6.运算符优先级和关联性
一般来说,一元运算符的优先级较高,而赋值运算符的优先级较低。算术运算符的优先级较高,而关系运算符和逻辑运算符的优先级较低。大多数运算符是左结合、一元运算符、三元运算符、赋值
7.表达式
表达式是由连接常量、变量和函数的运算符组成的表达式。每个表达式都有一个值和类型。表达式计算按照运算符优先级和关联性规定的顺序进行。
暂无评论内容