用位运算符替换“!=”

时间:2012-09-21 23:27:10

标签: c binary bit-manipulation

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

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

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

6 个答案:

答案 0 :(得分:8)

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

应该有用。

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

是的,使用这个:

if (a ^ b) { }

答案 3 :(得分:0)

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

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

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

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

如果您想模拟'=='运算符,请查看Fabian Giesen在Replacing "==" with bitwise operators

中的答案

答案 4 :(得分:0)

public interface IInterface { } public class Implementation : IInterface { } public void Test() { Register<IInterface, Implementation>(); RegisterRestrictive<IInterface, Implementation>(); } 并不足够。使用x ^ y。期望一位返回值的值不适用于!!(x ^ y),因为它留下的余数可能大于1。

答案 5 :(得分:-2)

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