运算符

1.C语言的操作符共有15个优先级,下表展示了各个操作符及其优先级和结合律:
 

2.记忆口诀: 
记忆不能死记,即使通过死记记住了,那也是短期记忆,长久之后也记不住,因此需要讲究特别的技巧。下表用三句话记住所有运算符的优先级:
3.操作符易错处 
如果不熟悉各操作符的优先级,很容易出现计算错误。一个常见的错误就是移位操作符(<<和>>) 与算术操作符之间的优先级。例如想把一个数a左移8位与另一个数b求和, 容易犯的错误就是认为移位运算符的优先级高于算术运算符,往往会写出如下的代码:
 a << 8 + b; 
由于算术运算符的优先级高于移位优先级,所以实际上上面的代码等价于: 
a << (8 + b); 
可见上面两个表达式的运算结果其结果与下面真正想要的结果相差甚远:
 (a << 8) + b 

此外,“=”与“==”操作符也非常容易混淆。尤其是在该用“==”的时候用成了“=”。例如: 
if (a ==b) 
    DoSomething(); 
该语句就会经常被错误的写成: 
if (a = b) 
    DoSomething(); 
这样,语义完全变了。本来是在a==b的条件下才执行的语句现在却变成了由b的值是否为非0决定了。 
当一个变量与一个常量做“==”比较时,为了避免类似的错误,一般将常量放在左边,将变量放在右边进行比较。如: 
if (NULL == p)

    do something; 

或者
 if (0 == i) 

    do something; 

这样,当误将“==”写成“=”时,程序在编译的时候就会报错,提醒程序设计者予以改正。

4,逗号操作符

逗号操作符组成的逗号表达式: a,b,c,d 。逗号表达式是用逗号运算符将表达式连接在一起形成新的表达式。逗号表达式的格式为: 表达式1,表达式2,…,表达式n 逗号表达式的计算顺序是从左往右,逗号表达式最终的值是表达式n的值,即表达式最右边的值为逗号表达式的值。 

在计算逗号表达式的值的时候,一定要注意,逗号运算符的优先级是最低的运算符,所以逗号运算符是最后参加运算的。比如考虑如下程序的输出是什么呢? 
void main(void) 

    int a,b,c; 
    a=b=1; 
    c=a++,b++,++b; 
    printf("%d,%d,%d\n",a,b,c); 


首先,由于逗号运算符的优先级最低,所以也就低于赋值运算符,所以表达式: 
c=a++,b++,++b 
等价于:
 (c=a++),b++,++b 
等价于: 
(c=a; a++),b++,++b 
其结果为: 
c=1, a=2, b= 3 
所以输出应该是:
2,3,1。
而整个逗号表达式的值为3。 
void main() 
{
    int a=2,b=4,c=6,x,y,z; 
    z=(y=(x=a+b),(b+c)); 
    printf("y=%d,x=%d,z=%d",y,x,z); 

由于赋值运算符优先级高于逗号运算符,所以,应该先算x=a+b,即x=6,再算y=(x=6),即y也等于6,再算b+c,即10,所以z=(6,10),所以,z=10。
于是输出为:
y=6,x=6,z=10 
当然,需要注意的是并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如
printf("%d %d %d",a,b,c); 
func(a, b,c);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值