嘿,我有一个简单的问题:
如何使用按位运算符在 O(1) 中确定一个 int 是否是 2 的幂(只有 1 个正位),而无需任何 < strong>IF 语句或任何其他类型的 BOOLEAN 表达式?
该方法需要返回一个整数值。
该方法可以返回一个确定的数字,您可以确定该数字表示它是 2 的幂,另一个数字表示它不是 2 的幂。[负数表示 X,正数表示 Y 也是允许的]
还有 你不能相信 int 有 32 位这一事实。
这是我在采访中被问到的问题。
最佳答案
如果减法可以接受,那么您可以只使用x & (x - 1)
,它给出 2 的幂 0,否则给出 >0。如果它需要是纯粹的按位解决方案,那么您需要以二进制补码算术的常用方式使用按位运算符实现 - 1
。
关于byte - 使用按位运算符判断一个数字是否为 2 的幂 [O(1)],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25063795/