我有一个数字是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
谢谢你,对不起我的英语
可以由计算机表示的所有整数和浮点数可以表示为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是总和的一部分.因此,通过检查结果是否为零,您可以确定这一点.