我一直在对变量执行按位运算。
int p=3,q=5;
int a=~p,b=~q; //complement a and b
printf("%d %d\t%d %d",p,a,q,b);
'b' 的理论输出是 10,如果它是有符号的,它必须是 -2。 但是输出是-6。
有人可以向我解释一下它的工作原理吗?
最佳答案
~
是 c(或 python)中的按位补码运算符,它本质上是计算 -x - 1
。
所以表格看起来像:
0 -1
1 -2
2 -3
3 -4
4 -5
5 -6
在二进制补码表示中,如果数字 x 的最高有效位为 1,则实际值为 −(~x + 1)。
例如,
0b11110000 = -(~0b1111 + 1) = -(15 + 1) = -16.
这是负数的自然表示,因为
0000001 = 1
0000000 = 0
1111111 = -1 (wrap around)
1111110 = -2
1111101 = -3 etc.
关于c - 按位运算符的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13265808/