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

时间:2012-11-05 10:19:48

标签: c# types int32

我在MSDN文档中看到了maximum value of Int32 is 2,147,483,647,十六进制0x7FFFFFFF

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

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

6 个答案:

答案 0 :(得分:31)

这是因为它是有符号整数。无符号的32位整数为您提供所期望的值。

查看此MSDN页面 - http://msdn.microsoft.com/en-us/library/exx3b86w(v=vs.80).aspx

要更深入地解释为什么要查看这个内容,杰克逊教皇的答案中的答案与二人的补语编号有关。

还有一些further reading

答案 1 :(得分:8)

因为一位用于存储符号(Int32可以小于零)。

http://en.wikipedia.org/wiki/Two%27s_complement

答案 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

相关问题