使用按位运算符如何测试整数的n个最低有效位是全集还是全集。如何测试所有位是否置1或所有位不是?
例如if n = 3
我只关心3至少显著位的测试应该在0和7和假返回true 0和7
当然,我可以做if x = 0 or x = 7
之间的所有其他值,但我会更喜欢使用按位运算符的东西。
如果该技术可以适用于考虑由掩码定义的所有位,则可获得奖励点数。
澄清:
如果我想如果位一个或两个设为我所能if ((x & 1 != 0) && (x & 2 != 0))
测试。但我可以做“更高效”if ((x & 3) != 0)
。
我试图找到一个像这样的“黑客”来回答这个问题:“匹配这个掩码的所有位都是全部设置还是全部未设置?”
简单的方法是if ((x & mask) == 0 || (x & mask) == mask)
。我想找到一种方法在没有||的单个测试中执行此操作运营商。
什么是用例?为什么你想要这样的方法 – 2015-02-08 04:48:35
我有兴趣在位操纵黑客通过阅读这里https://graphics.stanford.edu/~seander/bithacks.html我试图找到一种方法来测试,如果所有位的蒙面人要么全是1人,要么全是0.这只是好奇心,我不知道是否可以做到。 – 2015-02-08 04:52:28
有几个答案会导致编写'1 << n'的错误。这会导致未定义的行为,如果n> = 31(如果你在32位int系统中)。 '1'需要被转换为无符号类型,至少与您正在测试的值一样宽。 – 2015-02-08 21:29:07