仅使用按位运算符(|, &, ~, ^, >>, <<)
,是否可以替换!=
以下内容?
// ...
if(a != b){
// Some code
}
/// ...
这主要是出于自身利益,因为我看到了如何使用==
but not !=
。
仅使用按位运算符(|, &, ~, ^, >>, <<)
,是否可以替换!=
以下内容?
// ...
if(a != b){
// Some code
}
/// ...
这主要是出于自身利益,因为我看到了如何使用==
but not !=
。
if(a ^ b) {
//some code
}
应该管用。
您还可以使用您喜欢的方法==
并在其后面添加^ 0xFFFFFFFF
(使用适量的 F 以匹配数据类型的长度)。这会否定该值(与!
前面相同)。
a != b
a
表示和的位表示中至少有一个不同的位b
。如果两个输入位操作数不同,则 XOR 位运算符返回 1,否则返回 0。
因此,您可以对 and 应用 XOR 运算a
并b
检查结果是否不等于 0。
是的,使用这个:
if (a ^ b) { }
'!=' 测试的按位版本可能类似于:
if((a - b) | (b - a)) {
/* code... */
}
对这两个减法进行 OR 运算。如果两个数字相同,则结果将为 0。但是,如果它们不同(也就是 '!=' 运算符),则结果将为 1。
注意:上面的代码片段只适用于整数(这些整数可能应该是无符号的)。
但是,如果您想模拟“==”运算符,请查看 Fabian Giesen 在用位运算符替换“==”中的回答
x ^ y
并不总是足够的。使用!!(x ^ y)
. 期望一位返回值的值将不起作用,x ^ y
因为它留下的余数可能大于 1。
"~" 等于 NOT 所以应该可以工作。例如“a & ~b”。