首页 新闻 会员 周边 捐助

|运算符问题

0
悬赏园豆:10 [已解决问题] 解决于 2013-06-21 15:51
            byte bt = 2;if ((bt|0x7F)==0x7F)
            {

            }

如上的代码,0x7F表示16进制的数,转换成10进制的数后为127。

在实际运用中,当bt 这个变量大于等于零,且小于等于127,这个if条件是恒成立的。

我想问下,为什么是恒成立的,谁能说说这其中的道理。也就是if中通过运行位与运算在特定条件下是一直成立的。我想这个总不能一个一个去算吧,那么多数!

learnWindowsPhone的主页 learnWindowsPhone | 初学一级 | 园豆:38
提问于:2013-05-06 18:49
< >
分享
最佳答案
0

这不是按位与,这是按位或。

衡成立的话只要看二进制包含就行了。

0x7F是01111111,只要被这个数包含的,0???????,或上0x7F,当然是0x7F了。

同理你这个式子改成 bt & 0x7F == bt 对于127以内的数也是衡成立的。

 

我想这个总不能一个一个去算吧,那么多数!

这个是要在大脑里直接反应出来才行的,如果还要动脑筋去算的话说明这种代码见得太少了。

比如 if (n & 1 == 0) 来判断奇偶什么的,比如 while (0 != (n = n & (n-1))) bitcnt++; 做二进制1计数器什么的。

收获园豆:10
MeteorRain | 菜鸟二级 |园豆:232 | 2013-05-06 20:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册