将一个标志(0x00010001)按位与一个整数进行比较并查看整数位是否都设置的最有效方法是什么?
换句话说,执行以下操作的最有效方法是什么?
bit = (number & 0x001 ) & (number 0x 0x00010000 )
答案 0 :(得分:4)
一个简洁的解决方案,可以扩展到您想要同时测试的任意数量的位:
!(~number & 0x00010001)
我用按位NOT反转number
的所有位。如果两个位都置1,则两个位现在都为0,带掩码的按位AND &
将导致0.将逻辑NOT应用于0将返回非零整数。
如果任何位为0,则反转该位将使其为1.因此,按位AND后的结果将为非零,非零整数的逻辑NOT将返回0.
答案 1 :(得分:3)
我会去
(number & 0x00010001) == 0x00010001
当且仅当number
中的两个位都已设置时才会为真。