为什么Int32最大值是0x7FFFFFFF?
我在MSDN文档中看到Int32
的2,147,483,647
是2,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可以小于零)。
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个剩余值