C语言中+的优先级大于>>

本文介绍了C语言中运算符优先级的问题,特别是指出算数运算符的优先级高于移位运算符。在计算像素点偏移时,错误的表达式可能导致意料之外的结果。正确使用括号来确保运算顺序至关重要,避免在涉及多种运算符的表达式中产生混淆。

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

NOTE:

算数运算符的优先级刚好比移位运算符高一个优先级。

== 和 != 的优先级比位操作符 & ^ | 高一个优先级。

.  [ ] () 的优先级高于 * .

... ...

-----The C programming language 2ed, p48.

C语言的优先级真让人

抓狂

在计算Y、U、V分量的buffer中当前像素点的偏移位置,uiScaleX和uiScaleY是计算色度分量的偏移时的收缩比例。

curOffset = ((yStartInPic+y)>>uiScaleY) * stride + (xStartInPic+x)>>uiScaleX;

按照上面的优先级,该语句等价为:

curOffset =( ((yStartInPic+y)>>uiScaleY) * stride + (xStartInPic+x) )>>uiScaleX;

正确的应该是:

curOffset = ((yStartInPic+y)>>uiScaleY) * stride + ((xStartInPic+x)>>uiScaleX);

指针p所指对象的成员a:

p->a, 或者 (*p).a

i = 1,2,3,4,5;

实际上由于 = 的优先级比逗号运算符的要高,上面的语句等价为:

(i=1),2,3,4,5;

总结:

表达式若涉及加减乘数之外的操作符,最好加上括号!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值