繁体   English   中英

为什么Int32的最大值为0x7FFFFFFF?

[英]Why is Int32's maximum value 0x7FFFFFFF?

我在MSDN文档中看到Int322,147,483,6472,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可以小于零)。

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM