例如:
unsigned int i = ~0;
Result:我可以分配的最大数量i
and
signed int y = ~0;
Result: -1
为什么我得到-1
?我不应该得到可以分配的最大数量吗y
?
Both 4294967295
(又名UINT_MAX
) and -1
具有相同的二进制表示形式0xFFFFFFFF
或 32 位全部设置为1
。这是因为有符号数是用以下方式表示的二进制补码 http://en.wikipedia.org/wiki/Two%27s_complement。负数的 MSB(最高有效位)设置为1
其值通过翻转其余位并添加来确定1
并乘以-1
。因此,如果您将 MSB 设置为1
其余位也设置为1
,翻转它们(得到 32 个零),然后添加1
(get 1
)并乘以-1
最终得到-1
.
这使得 CPU 更容易进行数学计算,因为它不需要负数的特殊例外。例如,尝试添加0xFFFFFFFF
(-1) 和1
。由于只有 32 位的空间,这将溢出,结果将是0
正如预期的那样。
更多信息请访问:
http://en.wikipedia.org/wiki/Two%27s_complement http://en.wikipedia.org/wiki/Two%27s_complement
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)