0

将标志(0x00010001)按位与整数进行比较并查看整数中的两个位是否都设置的最有效方法是什么?

换句话说,执行以下操作的最有效方法是什么?

        bit = (number & 0x001 ) &  (number 0x 0x00010000 )
4

2 回答 2

4

一个简洁的解决方案,可扩展到您想要同时测试的任意数量的位:

!(~number & 0x00010001)

我用按位非反转所有位number。如果这两个位都设置了,那么这两个位现在都将为 0,并且&与掩码按位与将导致 0。对 0 应用逻辑 NOT 将返回非零整数。

如果任何一位为 0,则反转该位将使其为 1。因此按位与后的结果将非零,非零整数的逻辑非将返回 0。

于 2012-12-05T01:46:23.587 回答
3

我会去

(number & 0x00010001) == 0x00010001

当且仅当两个位number都设置时,这将是正确的。

于 2012-12-05T02:42:21.927 回答