【发布时间】:2013-12-08 14:25:06
【问题描述】:
如果我在 C 中有一个普通的 32 位 int,那么这个数字在内存中是如何表示的?具体来说,符号是如何存储的?
起初我以为它是符号和幅度,但后来我记得会有 + 和 - 0,所以我认为它可以存储在二进制补码中,但是当使用二进制补码时,我最终得到最大值4294967293,MSB 设置为 0(我通过总结从 2^31 到 2^0 的所有内容得到这个值),众所周知这是错误的。
【问题讨论】:
-
这实际上是实现定义的。但二进制补码可能是当今使用最广泛的。
-
您可能想了解Two's complement。
-
@mbratch 不在有符号表示中(既不是二进制补码也不是符号大小)。最大的 unsigned 32 位整数确实是
2^32-1,但那是完全不同的事情。 -
@delnan 哎呀,是的,对不起,我有点跑题了。我应该说
31^1-1(2^0 + ... + 2^30的总和。
标签: c binary integer twos-complement