24

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

我认为,如果它应该存储最终应该是和 hexadecimal的Int3232 位整数值。4,294,967,2950xFFFFFFFF

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

4

6 回答 6

36

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

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

要更深入地解释为什么会这样,请查看 Jackson Popes 答案中与 Two's Complement 数字表示相关的链接。

还有一些进一步的阅读

于 2012-11-05T10:21:33.747 回答
9

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

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

于 2012-11-05T10:21:34.370 回答
7

Int32 和 Int64 都是有符号的,因此它们可以处理从 -capacity/2 到 (capacity/2)-1(为零)的整数值,这就是为什么最大值不是您期望的值。但是你可以通过使用 unsigned int 只有正数来得到你想要的。

于 2012-11-05T11:56:18.770 回答
5

你没有考虑负数。 Int32有标志。

来自 MSDN: http : //msdn.microsoft.com/en-us/library/system.int32.minvalue.aspxMinValue-2,147,483,648;即十六进制0x80000000

于 2012-11-05T10:21:41.297 回答
5

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

于 2012-11-05T10:21:42.533 回答
1

In a 2's complement signed n-bit type, the range is from -2n-1 to 2n-1-1 because with n bits you can represent 2n different values, half of which is used for signed numbers because of the sign bit. The remaining 2n-1 half is used for non-negative number. Since one is used for 0, there are only 2n-1-1 remaining values for positive numbers

于 2014-05-30T03:10:43.890 回答