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

Check if number is divisible by a power of two

找到除以 x、一个 64 位整数或 return -1 的两个的最高幂。
零的情况没有定义,因为它是二的任意幂,所以你的方法可以 return 任何数字。

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

示例:输入 -> 输出

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

的答案
if ((num & 0x1) == 0)
    return Long.numberOfTrailingZeros(num);
else
    return -1;

一个算法可能是:(伪代码)

使用设置为零的计数器,将数字放入 var intvar 做{

  1. 右移(整数除以二)->dividedvar
  2. if dividedvar*2 != intvar then dividedvar = 0 /退出条件/
  3. else (intvar = dividedvar and counter ++) } 而 dividedvar !=0

试一试