我在MSDN文档中看到,Int32
的最大值是2,147,483,647
,十六进制为0x7FFFFFFF
。
我认为,如果是Int32
应该存储32位整数值,最终应该是4,294,967,295
, 十六进制为0xFFFFFFFF
。
我的问题是为什么Int32
只能存储31位整数值?
我在MSDN文档中看到,Int32
的最大值是2,147,483,647
,十六进制为0x7FFFFFFF
。
我认为,如果是Int32
应该存储32位整数值,最终应该是4,294,967,295
, 十六进制为0xFFFFFFFF
。
我的问题是为什么Int32
只能存储31位整数值?
这是因为它是一个有符号整数。无符号32位整数会给您期望的值。
请查看此MSDN页面-http://msdn.microsoft.com/en-us/library/exx3b86w(v=vs.80).aspx
如果想更深入地了解原因,请查看杰克逊·波普回答中与二进制补码表示相关的链接。
此外还有一些进一步阅读材料。
int32
是二进制补码数字,因此严格来说不能说最高位是符号位。这应该是一种一进制补码数字的情况。 - ServyInt32和Int64都是有符号的,因此它们可以处理从-capacity/2到(capacity/2)-1(对于零)的整数值,这就是为什么最大值不是您期望的原因。但是,您可以使用无符号整数来获得所需的结果,以便只有正数。
Int32
有符号。
来自MSDN: http://msdn.microsoft.com/zh-cn/library/system.int32.minvalue.aspx
MinValue
是 -2,147,483,648
,即十六进制 0x80000000
。