我需要确定一个有符号的32位数字是否是2的幂。到目前为止,我知道首先要做的是检查它是否为负数,因为负数不能是2的幂。
然后我要看看下一个数字是否有效等等。。。所以我可以这样写:
// Return 1 if x is a power of 2, and return 0 otherwise.
int func(int x)
{
return ((x != 0) && ((x & (~x + 1)) == x));
}
但对于我的作业,我只能使用其中的20个运算符:
! ~ & ^ | + << >>
没有相等的语句、循环、转换或语言构造。
所以我试着转换平等的部分,我知道!(a^b)与a==b相同,但我似乎无法完全搞清楚。有什么办法把这个秘密告诉允许的操作人员吗?
最佳答案
蒂姆的话使我羞愧。让我试着帮你自己找到答案。
就比特操作而言,x
是2的幂是什么意思?这意味着只有一个位被设置为1。我们怎么能做这样一个把戏,把那一位变成0,另一位可能变成1?所以那会给0吗?一个表情?如果你发现了-你赢了。
关于c - 判断32位有符号整数是否为2的幂,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7362485/