[英]Why is Int32's maximum value 0x7FFFFFFF?
我在MSDN文档中看到Int32
的2,147,483,647
是2,147,483,647
,十六进制0x7FFFFFFF
。
我认为,如果它是Int32
它应该存储32位整数值,最终应该是4,294,967,295
和十六进制0xFFFFFFFF
。
我的问题是为什么Int32
存储31位整数值?
这是因为它是有符号整数。 无符号的32位整数为您提供所期望的值。
查看此MSDN页面 - http://msdn.microsoft.com/en-us/library/exx3b86w(v=vs.80).aspx
为了更深入地解释为什么这是检查出来,杰克逊教皇的答案回答与二的补数数字表示有关。
还有一些进一步阅读 。
因为一位用于存储符号(Int32可以小于零)。
Int32和Int64都是有符号的,因此它们可以处理从-capacity / 2到(capacity / 2)-1(对于零)的整数值,这就是为什么最大值不是您期望的值。 但是你可以通过使用unsigned int得到你想要的东西只有正数。
你没有考虑负数。 Int32
有标志。
来自MSDN: http : //msdn.microsoft.com/en-us/library/system.int32.minvalue.aspx MinValue
是-2,147,483,648
; 也就是十六进制0x80000000
。
第一位是符号 - 一个int32被签名,即它可以是正/负(我可能不应该说'先'位!)
在2的补码有符号n位类型中,范围从-2 n-1到2 n-1 -1,因为n位可以表示2 n个不同的值,其中一半用于有符号数,因为符号位。 剩余的2 n-1半用于非负数。 由于一个用于0,因此正数只有2 n-1 -1个剩余值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.