在java中求解方程2 ^ x

-2 java bit-manipulation

我有一个数字是2 ^ x的总和

例如104 = 2 ^ 3 + 2 ^ 5 + 2 ^ 6

我想要一个简单的功能

如果数字可以是2 ^ x的总和,则返回true

如果x可能是第二个数字.

示例myfunc(3,104)= true

(5,104)=真

但是myfunc(3,2)= false

因为我们找不到数字2 ^ 3 + nb = 2

谢谢你,对不起我的英语

Wil*_*sem 5

可以由计算机表示的所有整数和浮点数可以表示为2的幂的和.

如果你的意思2^i是在总和中发生,你的功能应该只是检查按位掩码:

public static boolean myfunc (int i, int n) {
    return ((0x01<<i)&n != 0x00);
}
Run Code Online (Sandbox Code Playgroud)

该功能的工作原理如下:

0x01<<i
Run Code Online (Sandbox Code Playgroud)

返回2^i,然后使用&运算符:按位AND.如果这意味着2^i返回,当且仅当它2^i是总和的一部分.因此,通过检查结果是否为零,您可以确定这一点.