你们能解释一下下面的程序吗
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
.
如果您想要一个补零产生“最大值”的示例,请使用unsigned表示
int main() {
unsigned max = ~0u;
printf("%u\n", max);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)