嘿,我有一个简单的问题:
如何使用逐位运算符确定int是 2 (仅1个正位), O(1)没有任何< strong> IF 语句或任何其他类型的 BOOLEAN 表达式?
该方法需要返回一个整数值。
该方法可以返回一个你可以决定的数字,这意味着它的2的幂和另一个数字意味着它不是2的幂。[说负数表示X而正表示Y也是允许的]
另外 你不能依赖int有32位的事实。
这是我在接受采访时被问到的一个问题。
答案 0 :(得分:5)
如果减法是可以接受的,那么你可以使用x & (x - 1)
,其中0表示2的幂,否则> 0。如果它需要是一个纯粹的按位解决方案,那么你需要以通常的方式实现- 1
按位运算符进行二进制补码运算。