使用按位运算符[O(1)]确定数字是否为2的幂

时间:2014-07-31 16:03:08

标签: byte bit-manipulation bit bitwise-operators

嘿,我有一个简单的问题:

如何使用逐位运算符确定int是 2 (仅1个正位), O(1)没有任何< strong> IF 语句或任何其他类型的 BOOLEAN 表达式?

该方法需要返回一个整数值。

该方法可以返回一个你可以决定的数字,这意味着它的2的幂和另一个数字意味着它不是2的幂。[说负数表示X而正表示Y也是允许的]

另外 你不能依赖int有32位的事实。

这是我在接受采访时被问到的一个问题。

1 个答案:

答案 0 :(得分:5)

如果减法是可以接受的,那么你可以使用x & (x - 1),其中0表示2的幂,否则> 0。如果它需要是一个纯粹的按位解决方案,那么你需要以通常的方式实现- 1按位运算符进行二进制补码运算。