我在MSDN文档中看到了maximum value of Int32
is 2,147,483,647
,十六进制0x7FFFFFFF
。
我认为,如果它是Int32
,它应该存储最终应该是4,294,967,295
和十六进制0xFFFFFFFF
的32位整数值。
我的问题是为什么Int32
存储31位整数值?
答案 0 :(得分:31)
这是因为它是有符号整数。无符号的32位整数为您提供所期望的值。
查看此MSDN页面 - http://msdn.microsoft.com/en-us/library/exx3b86w(v=vs.80).aspx
要更深入地解释为什么要查看这个内容,杰克逊教皇的答案中的答案与二人的补语编号有关。
还有一些further reading。
答案 1 :(得分:8)
因为一位用于存储符号(Int32可以小于零)。
答案 2 :(得分:6)
Int32和Int64都是有符号的,因此它们可以处理从-capacity / 2到(capacity / 2)-1(对于零)的整数值,这就是为什么最大值不是您期望的值。但是你可以通过使用unsigned int得到你想要的东西,只有正数。
答案 3 :(得分:5)
你没有考虑负数。
Int32
有标志。
来自MSDN:http://msdn.microsoft.com/en-us/library/system.int32.minvalue.aspx
MinValue
为-2,147,483,648
;也就是十六进制0x80000000
。
答案 4 :(得分:5)
第一位是符号 - 一个int32被签名,即它可以是正/负(我可能不应该说'先'位!)
答案 5 :(得分:1)
在2的补码有符号n位类型中,范围从-2 n-1 到2 n-1 -1,因为n位可以表示2 n 不同的值,由于符号位,其中一半用于有符号数。剩余的2 n-1 一半用于非负数。由于一个用于0,因此正数仅剩2个 n-1 -1