代码之家  ›  专栏  ›  技术社区  ›  Amit Assaraf

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

  •  2
  • Amit Assaraf  · 技术社区  · 12 年前

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

    如何确定int是否为 2的幂 (仅1个正位)使用逐位运算符,在 O(1) 没有任何 如果 语句或任何其他类型的 布尔型 表示

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

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

    而且 您不能依赖int有32位的事实。

    这是我在一次采访中被问到的问题。

    1 回复  |  直到 12 年前
        1
  •  5
  •   Paul R    12 年前

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