咨询32位有符号整数最大值计算方式:为何最大值为2,147,483,647?
关于32位有符号整数最大值的几个疑问解答
嘿,这几个问题戳中了很多人对整数存储的认知盲区,我来给你掰扯明白:
为什么$2,147,483,647$是32位有符号整数的最大值?
现代计算机里,有符号整数普遍用补码来存储,32位的话,会把最高位(第32位)用作符号位:
- 符号位为
0时,表示这是一个正数 - 符号位为
1时,表示这是一个负数
剩下的31位用来存储数值部分,当这31位全为1的时候,这个正数的数值就达到了最大——因为每一位都取了能表示的最大状态。
具体计算方式
31位全1的二进制数,转换成十进制的话,可以用等比数列求和来算:
从(20)(第1位)加到(2{30})(第31位),求和公式是(2^n - 1)(n是位数),这里n=31,所以结果就是:2^31 - 1 = 2147483647
你也可以这么理解:31位二进制能表示的最大无符号数是(2^{31}-1),而因为符号位占了一位,正数的最大值就等于这个数。
为什么$8^{32}$和这个最大值不符?
这完全是把二进制位数和八进制位数搞混啦!
- 32位指的是二进制的位数,32位二进制能表示的总取值数是(2{32})个(包含正数、负数和0),而不是(8{32})
- (8^{32})对应的是32位八进制数的总取值数,八进制每一位有8种可能,和32位二进制整数的存储规则没有半毛钱关系,数值自然差了十万八千里。
内容的提问来源于stack exchange,提问作者Jordan Baron
相关产品推荐
相关产品推荐

