任何人都可以解释在下面的代码中如何执行x ^ -1。我试过但没有运气。我理解x ^ 1是如何执行的。
#include <stdio.h>
int main(void)
{
int a=220, b=221, c=3;
printf("a^1= %d ,, a^-1= %d \n", a^1, a^-1);
printf("b^1= %d ,, b^-1= %d \n", b^1, b^-1);
printf("c^1= %d ,, c^-1= %d \n", c^1, c^-1);
return 0;
}
/* output: a^1= 221 ,, a^-1= -221
b^1= 220 ,, b^-1= -222
c^1= 2 ,, c^-1= -4 */
答案 0 :(得分:3)
^
运算符是C中的XOR
或exclusive-or运算符。
为简化起见,请使用典型的two's-complement encoding来考虑8位有符号值。 int
类型的工作方式相同。
Decimal Binary
1 00000001
-1 11111111
-------- XOR
-2 11111110
请注意,一元运算符-
的优先级高于^
位运算符。
答案 1 :(得分:0)
签名 int
使用Two's complement代表负数。
1
0000 0000 0000 0000 0000 0000 0000 0001
-1
,使用了两个补码:
1111 1111 1111 1111 1111 1111 1111 1111
XOR
将两个结果输入:
1111 1111 1111 1111 1111 1111 1111 1110
,对于签名int
,-2
。
表示无符号整数,即2^32 - 2
。