为什么Int32的最大值是0x7FFFFFFF?

24

我在MSDN文档中看到,Int32的最大值是2,147,483,647,十六进制为0x7FFFFFFF

我认为,如果是Int32应该存储32位整数值,最终应该是4,294,967,295, 十六进制为0xFFFFFFFF

我的问题是为什么Int32只能存储31位整数值?


6个回答

37

2
int32是二进制补码数字,因此严格来说不能说最高位是符号位。这应该是一种一进制补码数字的情况。 - Servy
2
@harold 不要误导,而是要做出正确的陈述。 - Servy
1
@harold 那么,请不要让它具有误导性。 - Servy
1
@Servy,听起来是个好计划,但很遗憾它无法执行。该位被赋予了一个误导性的名称,我们既不能更改名称也不能消除误导性。 - harold
1
@harold 但是你可以完全省略使用那个术语,因为它是误导性的。这甚至不难做到。 - Servy
显示剩余5条评论

9

没有所谓的符号位。实际表示是二进制补码。双精度和浮点数(IEEE)有它。 - Gianluca Ghettini

7

Int32和Int64都是有符号的,因此它们可以处理从-capacity/2到(capacity/2)-1(对于零)的整数值,这就是为什么最大值不是您期望的原因。但是,您可以使用无符号整数来获得所需的结果,以便只有正数。


5

5
第一个比特位是符号位 - int32 是有符号的,即可以是正数/负数(好吧,我可能不应该说是“第一个”比特位!)

1
在二进制补码的n位有符号类型中,范围从-2n-1到2n-1-1,因为使用n位可以表示2n个不同的值,其中一半用于有符号数字,因为有符号位。剩下的2n-1一半用于非负数。由于一个用于0,因此仅剩2n-1-1个正数值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接