为什么Int32最大值是0x7FFFFFFF?

我在MSDN文档中看到Int322,147,483,6472,147,483,647 ,hex0x7FFFFFFF
http://msdn.microsoft.com/en-us/library/system.int32.maxvalue.aspx

我想,如果它是Int32它应该存储32位整数值,最后应该是4,294,967,295和hex0xFFFFFFFF

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

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

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

为了更深入地解释为什么这是检查出来,jackson教皇的答案回答与二的补数数字表示有关。

还有一些进一步阅读 。

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

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

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 ; 也就是hex0x80000000

在2的补码有符号n位类型中,范围从-2 n-1到2 n-1 -1,因为n位可以表示2 n个不同的值,其中一半用于有符号数字,因为符号位。 剩下的2 n-1半用于非负数。 由于一个用于0,因此正数只有2 n-1 -1个剩余值