byte - 使用按位运算符判断一个数字是否为 2 的幂 [O(1)]

标签 byte bit-manipulation bit bitwise-operators

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

如何使用按位运算符在 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/

相关文章:

arrays - 高效的钻头容器

c - 移位取消而不是预期的行为

c# - 将 System.IO.Stream 转换为 Byte[]

c# - 将字节更改为字符串的简单方法?

java - 如何使用 Java 中的收据打印机和 ESC/POS 命令提高速度

Java 位掩码范围

data-structures - 最右边的 n 个整数的总数

c# - 为什么我的新 BitArray 初始化时使用了错误的值?

c# - 如何使用 C# 从位信息创建 char 数组

javascript - 如何将 AWS 错误消息中收到的字节转换为 Javascript 可读的内容?