use*_*112 2 c c++ bit-manipulation bit bitwise-operators
我试图消除一个IF语句,如果我收到数字32,我想要一个'1',但任何其他数字我想要'0'.
32是0010 0000所以我考虑用1101 1111对我的输入数字进行异或.因此如果我得到数字32,我最终会得到1111 1111.
现在有没有任何方法可以对各个位进行AND运算(1111 1111),因为如果我的一个XOR结果为0,则表示我的最终AND-ed值为0,否则为1?
编辑:使用GCC,而不是英特尔编译器(因为我知道那里有很多内在函数)
表达方式
!(x ^ 32)
Run Code Online (Sandbox Code Playgroud)
如果你坚持的话,会为你做的伎俩.
这将始终在C中工作,并且几乎可以在所有C++设置中工作.从技术上讲,它在C++中的计算结果为布尔值,在几乎所有情况下都可以像0或1那样工作,但如果你想要一个技术上正确的C++答案:
(0 | !(x^32))
Run Code Online (Sandbox Code Playgroud)
要么:
(int)!(x ^ 32)
Run Code Online (Sandbox Code Playgroud)
或者使用更现代/更详细的C++演员
static_cast<int>(x ^ 32)
Run Code Online (Sandbox Code Playgroud)