用位运算符替换“!=”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用位运算符替换“!=”相关的知识,希望对你有一定的参考价值。
仅使用按位运算符(|, &, ~, ^, >>, <<)
,是否有可能替换下面的!=
?
// ...
if(a != b){
// Some code
}
/// ...
这主要是出于自身利益,因为我看到了如何用==
而不是!=
。
答案
if(a ^ b) {
//some code
}
应该管用。
您也可以使用==
的首选方法并在其后面添加^ 0xFFFFFFFF
(使用适当数量的Fs来匹配数据类型的长度)。这否定了价值(与前面的!
相同)。
另一答案
a != b
意味着a
和b
的位表示中至少有一个不同的位。如果两个输入位操作数不同,则XOR位运算符返回1,否则返回0。
因此,您可以对a
和b
应用XOR运算,并检查结果是否不等于零。
另一答案
'!='测试的按位版本可能类似于:
if((a - b) | (b - a)) {
/* code... */
}
对两个减法进行或运算。如果两个数字相同,则结果为0.但是,如果它们不同(也就是'!='运算符),则结果将为1。
注意:上面的代码片段只适用于整数(这些整数应该是无符号的)。
但是,如果你想模拟'=='运算符,请查看Fabian Giesen在Replacing "==" with bitwise operators中的答案
另一答案
x ^ y
并不总是足够的。使用!!(x ^ y)
。期望一位返回值的值不适用于x ^ y
,因为它留下的余数可能大于1。
另一答案
是的,使用这个:
if (a ^ b) { }
另一答案
“〜”等于NOT,因此应该起作用。例子是“a&~b”。
以上是关于用位运算符替换“!=”的主要内容,如果未能解决你的问题,请参考以下文章