打印

C51 等于“==”以及运算优先级的问题 有点奇怪

[复制链接]
2332|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gdmgb520|  楼主 | 2010-2-4 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天调程序(Keil C),怎么调都通不过,后来在debug里面发现了如下问题。但是我没有搞明白这到底是怎么回事。希望大家有空看看,指点一下。
我得到的经验和教训就是,不管表达式多简单,优先运算的一定加括号。

看下面的两个表达式:(一下表达式和结果是在OutPut Window 的Command选项卡里输入和得到的)
表达式一:(dat2[0]&temp)==0
运算结果:0x0001
表达式而:dat[0]&temp==0
运算结果:0x0000
其中,dat2[0]的值是0x00,temp的值是0x01。
而输入dat2[0]&temp的结果是0x0000。


然后,我有测试了一下两个表达式:
表达式一:0x00&0x01==0
运算结果:0x0000
表达式二:(0x00&0x01)==0
运算结果:0x0001


这是什么原因呢?

相关帖子

沙发
cauhorse| | 2010-2-4 18:46 | 只看该作者
&:按位与
==:等于
"=="的优先极比"&"来得高,故而:
表达式1中,先判断"0x01==0"不成立,后与0x00相与,最终为0;
表达式2中,因为有括号运算符的存在,先计算"0x00&0x01",与的结果是0,随后判断"0==0",结果为真。

使用特权

评论回复
板凳
赤铸| | 2010-2-4 19:14 | 只看该作者
表达式“0x01==0”的值是0,所以“0x00&(x01==0)完全等同于“0&0”
优先级就是个人为规定,当然也有一定道理,就是“符合一般习惯”
多数情况下,逻辑判断里 (a==b) && (c==d) 这样的组合比较多,所以规定 == 优先级比 && || 高,方便

位运算显得比较“低级”,比较“汇编”,多用于硬件控制或代码优化之类,也许C语言的设计者认为没必要定那么高优先级?

使用特权

评论回复
地板
gdmgb520|  楼主 | 2010-2-8 14:07 | 只看该作者
恩,明白了,谢谢两位的解答。
这两天有点忙,那天发了贴就一直没有过来。
呵呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:了解新东西才知道自己的不足。 www.elecbench.com

67

主题

452

帖子

1

粉丝