0 c binary logic bit-manipulation
我需要确定一个有符号的 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));
}
Run Code Online (Sandbox Code Playgroud)
但是对于我的任务,我只能使用其中的 20 个运算符:
! ~ & ^ | + << >>
Run Code Online (Sandbox Code Playgroud)
并且没有相等语句或循环或强制转换或语言结构。
所以我试图转换相等部分,我知道 !(a^b) 与 a == b 相同,但我似乎无法完全弄清楚。关于如何将其转换为允许的运营商的任何想法?
蒂姆的评论让我感到羞耻。让我试着帮助你自己找到答案。
就位x操作而言,2 的幂是什么意思?这意味着只有一位设置为 1。我们如何才能做到这一点,即将该位变为 0 而其他一些可能变为 1?那么 & 会给出 0?在单一的表达?如果你发现 - 你赢了。
| 归档时间: |
|
| 查看次数: |
3094 次 |
| 最近记录: |