除了检查两个数字是否相等之外,C中使用^
运算符的目的是什么?另外,为什么它首先用于平等而不是==
?
答案 0 :(得分:6)
^
运算符是按位XOR运算符。虽然我从未见过它用于检查等同性。
x ^ y
时, 0
会很快评估为x == y
。
答案 1 :(得分:2)
^
是C中的逐位XOR运算符。它可以用于位切换和交换两个数字;
x^=y, y^=x, x^=y;
可用于查找最多两个数字;
int max(int x, int y)
{
return x ^ ((x ^ y) & -(x < y));
}
答案 2 :(得分:2)
它可用于选择性地翻转位。 (例如,要在整数中切换位#3的值,您可以说x = x ^ (1<<3)
或更紧凑,x = x^0x08
或甚至x^=8
。(虽然现在我看一下,最后一个表格看起来像某种淫秽的表情符号,应该可以避免。:)
它应该永远在测试中用于相等(在C中),除了用于测试本科生对^
运算符的理解的棘手代码。 (在汇编中,某些架构可能具有速度优势。)
答案 3 :(得分:2)
XOR运算符用于加密(使用伪随机比特流加密和解密文本),随机数生成器(如Mersenne Twister)和inline-swap以及其他{{3} }:
int a = ...;
int b = ...;
// swap a and b
a ^= b;
b ^= a;
a ^= b;
(如果没有其他变量的空间,例如在寄存器很少的CPU上),则非常有用。
答案 4 :(得分:2)
^
是Bitwise异或。
按位运算在其各个位的级别上对一个或多个位模式或二进制数字进行操作。它是处理器直接支持的快速,原始动作,用于操作值以进行比较和计算。 (来源:Bitwise Operation)
XOR运算符有两个操作数,如果只有一个操作数设置为1
,则返回1
。
因此,两位数的按位异或运算是这些逐位运算的结果。
例如:
00000110 // A = 6
00001010 // B = 10
00001100 // A ^ B = 12
答案 5 :(得分:1)
它是独家或运营商。它将按位排序或两个参数。如果数字相等,这将导致0,而如果它们不相等,则将设置两个参数之间不同的位。
您通常不会使用==
插入,只有在需要知道哪些位不同时才会使用它。
答案 6 :(得分:1)
我工作的嵌入式系统的两个实际使用示例:
在状态消息生成功能中,其中一个单词应该是外部设备状态字的直通。设备行为和消息规范之间存在脱节 - 一个认为bit0意味着'错误',而另一个认为它意味着'OK'。
statuswords[3] = devicestatus ^ 1; //invert B0
16位目标处理器的分支速度非常慢,因此在内部循环中if (sign(A)!=sign(B) B=0;
被编码为:
B*=~(A^B)>>15;
需要4个周期而不是8个,并且做同样的事情:如果符号位不同,则将B设置为0。
答案 7 :(得分:0)
在许多一般情况下,我们可能会使用'^'作为'=='的替代,但这并不能完全给出相等或不相等的结果。相反 - 它会逐位检查给定变量并设置结果对于每个位单独进行,最后显示一个总结为结果的结果。