byte bt = 2;if ((bt|0x7F)==0x7F) { }
如上的代码,0x7F表示16进制的数,转换成10进制的数后为127。
在实际运用中,当bt 这个变量大于等于零,且小于等于127,这个if条件是恒成立的。
我想问下,为什么是恒成立的,谁能说说这其中的道理。也就是if中通过运行位与运算在特定条件下是一直成立的。我想这个总不能一个一个去算吧,那么多数!
这不是按位与,这是按位或。
衡成立的话只要看二进制包含就行了。
0x7F是01111111,只要被这个数包含的,0???????,或上0x7F,当然是0x7F了。
同理你这个式子改成 bt & 0x7F == bt 对于127以内的数也是衡成立的。
我想这个总不能一个一个去算吧,那么多数!
这个是要在大脑里直接反应出来才行的,如果还要动脑筋去算的话说明这种代码见得太少了。
比如 if (n & 1 == 0) 来判断奇偶什么的,比如 while (0 != (n = n & (n-1))) bitcnt++; 做二进制1计数器什么的。