C语言深度解析(四)

  9.运算符的优先级
        @1.运算符的优先级表


优先级          运算符          名称或含义           结合方向
   1             []              数组下标           从左到右
                 ()               圆括号            
                  .           成员选择(对象)    
                 ->           成员选择(指针)


   2             -            负号运算符             从右到左
               (类型)       强制类型转换           
                  ++          自增运算符 
                  --          自减运算符
                  *           取值运算符
                  &           取地址运算符
                  !          逻辑非运算符
                  ~           按位取反运算符
                  sizeof      长度运算符        
 
   3              /               除                 从左到右
                  *               乘 
                  %             余数(取模)
                  
   4              +               加                 从左到右
                  -               减 


   5              <<             左移                从左到右
                  >>             右移 
 
   6              >              大于                从左到右
                  >=             大于等于
                  <              小于 
                  <=             小于等于
    
   7              ==             等于                从左到右
                  !=            不等于
 
   8              &              按位与              从左到右


   9              ^              按位异或            从左到右


   10             |              按位或              从左到右


   11             &&             逻辑与              从左到右


   12             ||             逻辑或              从左到右
 
   13             ?:           条件运算符          从右到左


   14              =             赋值运算符          从右到左
                  /=             除后赋值
                  *=             乘后赋值
                  %=             取模后赋值 
                  +=             加后赋值
                  -=             减后赋值
                  <<=            左移后赋值
                  >>=            右移后赋值
                  &=             按位与后赋值
                  ^=             按位异或后赋值
                  |=             按位或后赋值


   15             ,             逗号运算符          从左到右


        @2.一些容易出错的优先级问题


1.   优先级问题:.的优先级高于*->操作符用于清除这个问题


     表达式    : *p.f
经常误认为的结果:p所指的字段f(*p).f
     实际结果   :
2.   优先级问题: []高于*数组
 
     表达式    : int * ap[]                               
经常误认为的结果:ap是个指向int数的指针  int (* ap)[]
     实际结果   :
3.   优先级问题: 函数()高于*
    
     表达式    : int *fp()
经常误认为的结果:fp是个函数指针,fp是个函数,返回int    int (*fp)()  
     实际结果   :
4.   优先级问题: ==和!=高于位操作 


     表达式    : (val & mask !=0)


经常误认为的结果:(val & mask)!=0     


     实际结果   :val & (mask !=0)
5.   优先级问题: ==和!=高于赋值符


     表达式    :c=getchar()!=EOF


经常误认为的结果:(c=getchar())!=EOF 


     实际结果   :c = (getchar()!=EOF)
6.   优先级问题: 算术运算符高于位移运算符 


     表达式    : mab<<4+lsb  


经常误认为的结果:(msb << 4)+lsb  


     实际结果   : msb  <<(4+lsb)
7.   优先级问题: 逗号运算符在所有运算符中优先级最低     


     表达式    :i =1,2  


经常误认为的结果: i = (1,2)  


     实际结果   :(i = 1),2




       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值