1

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

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

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

4

6 回答 6

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

应该管用。

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

于 2012-09-21T23:35:53.470 回答
3

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

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

于 2012-09-21T23:35:03.040 回答
0

是的,使用这个:

if (a ^ b) { }
于 2012-09-21T23:31:19.990 回答
0

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

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

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

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

但是,如果您想模拟“==”运算符,请查看 Fabian Giesen 在用位运算符替换“==”中的回答

于 2013-01-05T10:54:40.257 回答
0

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

于 2018-01-27T01:06:01.440 回答
-2

"~" 等于 NOT 所以应该可以工作。例如“a & ~b”。

于 2012-09-21T23:39:15.253 回答