我被这个基本问题困扰:
int x=1;
printf(~x|x) // -1
不应该是 ~01|01 ~01 = 10 10|01 = 11 =3
吗?
好的,阅读完所有回复后,我的理解是 1111=-1
在二进制补码机上。
我的后续问题是为什么是 1111 =-1
而不是 15?
谢谢
最佳答案
在 C 语言中,运算符 ~
(按位 NOT)的优先级高于 |
(按位 OR)。
当sizeof (int) == 4
时:
x = 00000000 00000000 00000000 00000001
~x = 11111111 11111111 11111111 11111110
~x|x = 11111111 11111111 11111111 11111111
对于二进制补码,11111111 11111111 11111111 11111111
只是 -1
。
要回答您的后续问题,您可以运行此代码并查看结果:
unsigned int x = 1;
printf("%u", ~x|x);
关于c - 为什么x或x的补码是-1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35400309/