检查数字是否可以被二的幂整除

Ily*_*man -14 java algorithm bit-manipulation

找出 2 的最大幂x,一个 64 位整数,或返回 -1。
零情况未定义,因为它是 2 的任何幂,因此您的方法可以返回任何数字。

我尝试BigInteger.getLowestSetBit()为此使用,它返回正确的答案,但远非最佳。

示例:输入 -> 输出

  • 3 -> -1
  • 6 -> 1
  • 4256 -> 5

har*_*old 6

Long类中,有一个方便的静态函数numberOfTrailingZeros,它几乎可以满足您的需求,除了当输入不能被 2 整除时它返回零(而不是 -1)。您可以用不同的方式处理这种情况。例如,扩展@0x476f72616e的答案

if ((num & 0x1) == 0)
    return Long.numberOfTrailingZeros(num);
else
    return -1;
Run Code Online (Sandbox Code Playgroud)