用位运算符替换“!=”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用位运算符替换“!=”相关的知识,希望对你有一定的参考价值。

仅使用按位运算符(|, &, ~, ^, >>, <<),是否有可能替换下面的!=

// ...
if(a != b){
    // Some code
}
/// ...

这主要是出于自身利益,因为我看到了如何用==而不是!=

答案
if(a ^ b) {
    //some code
}

应该管用。

您也可以使用==的首选方法并在其后面添加^ 0xFFFFFFFF(使用适当数量的Fs来匹配数据类型的长度)。这否定了价值(与前面的!相同)。

另一答案

a != b意味着ab的位表示中至少有一个不同的位。如果两个输入位操作数不同,则XOR位运算符返回1,否则返回0。

因此,您可以对ab应用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”。

以上是关于用位运算符替换“!=”的主要内容,如果未能解决你的问题,请参考以下文章

编程思想:巧用位运算重构代码

java用位运算实现加减乘除

用位运算实现四则运算之加减乘除(用位运算求一个数的1/3) via Hackbuteer1

必用位运算

实部虚部合并和提取,巧用位运算符<<,>>, |,宏告警

用位运算实现两个数相加