C语言之符号优先级

本文详细介绍了各类运算符的优先级及结合方向,并列举了常见易错案例,帮助读者正确理解和运用运算符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类别

优先级最高的并不是真正意思上的运算符

优先级运算符名称或含义使用形式结合方向说明
1[ ]数字下标数组名[常量表达式]左到右
2( )圆括号(表达式)/函数名(形参表)左到右
3.成员选择(对象)对象.成员名左到右
4->成员选择(指针)对象指针->成员名

单目运算符

优先级运算符名称或含义使用形式结合方向
1-负号运算符-表达式右到左
2(类型)强制类型转换(数据类型)表达式右到左
3++自增运算符++变量名/变量名++右到左
4- -自减运算符–变量名/变量名–右到左
5*取值运算符*指针变量右到左
6&取地址运算符&变量名右到左
7逻辑非运算符!表达式右到左
8~按位取反运算符~表达式右到左
9sizeof长度运算符sizeof(表达式)右到左

双目运算符

优先级运算符名称或含义使用形式结合方向
1/
2*
3%

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

优先级问题表达式经常误认为的结果实际结果
.的优先级高于**p.fp所指对象的字段f对p取f偏移,作为指针,然后进行解除引用操作,*(p.f)
()高于[ ]int (*ap)[n]xxxxap是指向一个具有 n个int数组的指针
[ ]高于 *int *ap[ ]ap是个指向int数组的指针,int(*ap)[ ]ap是个元素为int指针的数组 int *(ap[ ])
函数( )高于*int *fp( )fp是个函数指针,所指函数返回int。int(*fp)( )fp是个函数,返回int *, int * (fp())
==和!=高于位操作(val & mask !=0)(val & mask) != 0val & (mask!=0)
==和!=高于赋值符c = getchar( ) != EOF(c = getchar())!=EOFc = (getchar != EOF)
算术运算符高于移位运算符msb<< 4 + lsb(mab<<4) +lsbmsb<<(4+lsb)

“== ” 与 “&” 优先级

 if( a & b == c)
 {
 	function(); //一不小心,这里的function可能永远执行不到
 }

原因: == 优先级要比 &高,因此,此处先会判断bc的结果,然后再去执行a & (bc)。
上述语句与我们实际想要的结果相反,我们本意是希望判断((a&b)== c)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值