gpt4 book ai didi

c - 为什么x或x的补码是-1?

转载 作者:行者123 更新时间:2023-11-30 20:12:27 26 4
gpt4 key购买 nike

我被这个基本问题困扰:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com