请大家解释一下下面的程序
int main()
{
int max = ~0;
printf("%d\n",max);
return 0;
}
AFAIK ~ 将翻转位。在这种情况下,即 ~0 会将所有位设置为 1。因此 max 变量应包含 MAX 值,但我将 o/p 设置为 -1。所以这里的任何人都可以告诉我为什么我得到 o/p 为 -1。
最佳答案
为什么期望获得“最大值”?在 2 的补码符号表示中,全 1 位模式代表 -1
。它就是这样。
2 的补码符号表示中的最大值由 01111...1
位模式表示(即第一位是 0
)。你得到的是 1111...1
,这显然是负数,因为第一位 - 符号位 - 是 1
。
如果您想要一个补零产生“最大值”的示例,请使用无符号表示
int main() {
unsigned max = ~0u;
printf("%u\n", max);
}
关于c - 按位补码运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7274753/