为什么位与运算符"&"的优先级比"+"低?

[复制链接]
3251|6
 楼主| wlsui 发表于 2008-6-20 18:40 | 显示全部楼层 |阅读模式
上午写程序的时候才留意这个问题:
cStr[0] = (ucErrCode >> 4) & 0x0f + 0x30;
cStr[1] = ucErrCode & 0x0f + 0x30;
结果发现cStr里的值仍然是ucErrCode的高4位和低4位的阿拉伯数字(十六进制的ucErrCode中高4位和低4位只有数字,没有A~F), 而不是预想的字符型数字. 后来才发现是由于 & 的优先级比 + 低.

为什么位与"&"的优先级比"+"低呢? 按照习惯应该是比"+"高啊.当然这只是我的思维习惯(现在看来是坏的习惯). 不过我还是想问下, C标准制定者在定义"&" 和 "+" 的优先级顺序时是基于什么考虑呢?
平常人 发表于 2008-6-20 20:52 | 显示全部楼层

算术运算优于逻辑运算

有算术运算符参与的运算为整个算法做贡献,这种时候逻辑运算符只能当陪衬了,逻辑运算符优先级低于算术运算符就不奇怪了。
ayb_ice 发表于 2008-6-21 09:14 | 显示全部楼层

因为人家就是这么定的

dai_weis 发表于 2008-6-21 09:37 | 显示全部楼层

没有为什么,规定就是这么样

多用几个括号了,好处很多
除了考试很少有人把很长的一段写在一起还不用括号
农民讲习所 发表于 2008-6-21 09:46 | 显示全部楼层

多几个括号不会累死人

俺也记不住这些优先到底谁高谁低,要看书,但俺从来就没出现过这些问题,就是习惯乱加括号。
yewuyi 发表于 2008-6-21 10:21 | 显示全部楼层

哈哈,我还因为自己水平臭,所以记不得优先级呢……

原来还有这么难友……



加括号的好处就是便于阅读,一目了然……



突然想起刚出道应聘时的一次经历,一个主考官给俺弄了一个长长的式,考俺优先级顺序,并让俺用括号分割开来,NND,最后俺狼狈而逃……
gyt 发表于 2008-6-22 10:53 | 显示全部楼层

一定要用括号

不然可读性太差
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

263

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部