用位运算符替换“!=”

问题描述 投票:1回答:6

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

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

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

c binary bit-manipulation
6个回答
7
投票
if(a ^ b) {
    //some code
}

应该管用。

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


3
投票

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

因此,您可以对ab应用XOR运算,并检查结果是否不等于零。


0
投票

'!='测试的按位版本可能类似于:

if((a - b) | (b - a)) {
    /* code... */
}

对两个减法进行或运算。如果两个数字相同,则结果为0.但是,如果它们不同(也就是'!='运算符),则结果将为1。

注意:上面的代码片段只适用于整数(这些整数应该是无符号的)。

但是,如果你想模拟'=='运算符,请查看Fabian Giesen在Replacing "==" with bitwise operators中的答案


0
投票

x ^ y并不总是足够的。使用!!(x ^ y)。期望一位返回值的值不适用于x ^ y,因为它留下的余数可能大于1。


0
投票

是的,使用这个:

if (a ^ b) { }

-2
投票

“〜”等于NOT,因此应该起作用。例子是“a&~b”。

© www.soinside.com 2019 - 2024. All rights reserved.