jjA*_*man 7 c bit-manipulation bitwise-operators
我好几个小时都在考虑这个问题.这里是:
如果给定的整数"x"具有等于1的任何位,则写入一个返回1的表达式.否则返回0.
我明白我实际上只是想弄清楚x == 0,因为那是唯一没有1位的int,但我无法找到解决方案.您可能不会使用传统的控制结构.您可以使用按位运算符,加法,减法和位移.建议?
这是我能想到的最好的:
y = (((-x) | x) >> (BITS - 1)) & 1;
Run Code Online (Sandbox Code Playgroud)
其中 BITS = 32 对于 32 位整数,即BITS = sizeof(int) * CHAR_BIT;
这是一个测试程序:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(int argc, char *argv[])
{
const int BITS = sizeof(int) * CHAR_BIT;
if (argc == 2)
{
int x = atoi(argv[1]);
int y = (((-x) | x) >> (BITS - 1)) & 1;
printf("%d -> %d\n", x, y);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)