c语言操作符

1  算数操作符

c语言操作符

c语言操作符

2 逻辑操作符

c语言操作符

 

3 按位操作符

c语言操作符

 

4 赋值运算操作符

c语言操作符

 

5 其他的操作符

c语言操作符

其他运算符中的三目运算符“condition?exp1:exp2 ”是C语言中唯一的三目运算符可以用if——else语句来描述。

 

总结:1  左移运算符左移一位相当于乘二,其效率比乘以2的效率高。左移其右边自动补零,右移其左边补符号位。

2   这些操作符的优先级顺序    ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符,    

3   按位与 ,或运算符不能和逻辑与,或搞混。弄清二者的区别,否则程序会出现意想不到的bug,排查起来不容易被发现。

 

问:下面操作会输出什么?为什么?

[cpp] view plain copy

  1. #include<stdio.h>  
  2. int main(void)  
  3. {  
  4.     char *ptr ="Linux";  
  5.     printf("\n [%c] \n",*ptr++);  
  6.     printf("\n [%c] \n",*ptr);  
  7.     return 0;  
  8. }  

答案:
输出结果应该是这样:

【L】

【i 】

 

本题解析

因为“++”和“ ”的优先级一样,那么就应该按照结合性来进行计算,

而这两个操作符的结合性都是自右向左的,

所以 “ptr++”相当于“(ptr++)” 。

即应该先执行 ptr++ ,然后才是 ptr,

所以操作结果是“L”。第二个结果是“i”。

相关知识点

操作符的优先级与结合性是非常常见的一个考点,

对于这部分内容来说,最容易易考察的就是++/--操作符、

*操作符、三目运算符、逗号运算符,

首先再来看一下运算符的优先级与结合性:

c语言操作符

 

上面是运算符的优先级与结合性的列表,

自上而下,优先级依次递减。

许多同学可能看到这个之后觉得有点太多了,

要记下来非常困难,那么我们总结出来一下几句话,

只要记住这几句话,那么你就可以记住了:


伪运算符优先级最高,单目运算符第二
算术运算符>比较运算符>位运算符>逻辑运算符
赋值运算符除逗号外最低
自右向左结合性的只有赋值运算符与单目运算符

这里有一道比较有意思的题目,大家可以简单的看一下
设有语句句 int a=3;
则执行了语句 a+=a-=a*=a ;
变量 a 的值是
 

答案:
0
大家可以思考下。


不过不建议大家强行去记操作符的优先级表,有以下几个原因:

 

1、不同语言的优先级是不同的

2、保证代码简洁,使用括号明确地表达运算顺序,

      不依赖于运算符的默认优先级,

      如果需要调整运算顺序,用括号明确表达。