仅使用按位运算符(|, &, ~, ^, >>, <<)
,是否可以替换下面的!=
?
// ...
if(a != b){
// Some code
}
/// ...
这主要是出于自身利益,因为我看到了如何使用==
而不是!=
。
答案 0 :(得分:8)
if(a ^ b) {
//some code
}
应该有用。
您还可以使用首选方法==
并在其后添加^ 0xFFFFFFFF
(使用适当数量的F来匹配数据类型的长度)。这会否定价值(与前面的!
相同)。
答案 1 :(得分:3)
a != b
表示a
和b
的位表示中至少有一个不同的位。如果两个输入位操作数不同,则XOR位运算符返回1,否则返回0.
因此,您可以对a
和b
应用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”。