【发布时间】:2012-10-25 04:00:17
【问题描述】:
我在 MSDN 文档中看到 maximum value of Int32 is 2,147,483,647,十六进制 0x7FFFFFFF。
我认为,如果是Int32,它应该存储最终应该是4,294,967,295 和十六进制0xFFFFFFFF 的32 位整数值。
我的问题是为什么Int32 存储 31 位整数值?
【问题讨论】:
我在 MSDN 文档中看到 maximum value of Int32 is 2,147,483,647,十六进制 0x7FFFFFFF。
我认为,如果是Int32,它应该存储最终应该是4,294,967,295 和十六进制0xFFFFFFFF 的32 位整数值。
我的问题是为什么Int32 存储 31 位整数值?
【问题讨论】:
这是因为它是一个有符号整数。一个无符号的 32 位整数为您提供您期望的值。
查看此 MSDN 页面 - http://msdn.microsoft.com/en-us/library/exx3b86w(v=vs.80).aspx
要更深入地解释为什么会这样,请查看 Jackson Popes 答案中与 Two's Complement 数字表示相关的链接。
还有一些further reading。
【讨论】:
int32 是一个二进制恭维数,所以说最高位是符号位是不公平的。那将是一个人的赞美数字。
因为使用一位来存储符号(Int32 可以小于零)。
【讨论】:
Int32 和 Int64 都是有符号的,因此它们可以处理从 -capacity/2 到 (capacity/2)-1(为零)的整数值,这就是为什么最大值不是您期望的值。但是你可以通过使用 unsigned int 只有正数来得到你想要的。
【讨论】:
第一位是符号 - 一个 int32 已签名,即它可以是正数/负数(我可能不应该说“第一位”!)
【讨论】:
您没有考虑负数。
Int32有签到。
来自 MSDN:http://msdn.microsoft.com/en-us/library/system.int32.minvalue.aspx
MinValue 是-2,147,483,648;即十六进制0x80000000。
【讨论】:
在 2 的补码有符号 n 位类型中,范围是从 -2n-1 到 2n-1-1,因为您可以用 n 位表示2n 个不同的值,其中一半用于有符号数,因为有符号位。剩下的 2n-1 一半用于非负数。由于 1 用于 0,因此正数只有 2n-1-1 个剩余值
【讨论】: