跳转至

int 类型取值范围为什么是\(-2^{31}\)\(2^{31}-1\)

前置知识

二进制,负数的补码

目标

int 类型的取值范围,对 +0、-0 的理解

What

以 32 位二进制补码为例:

0              = 0000 0000 0000 0000 0000 0000 0000 0000
1              = 0000 0000 0000 0000 0000 0000 0000 0001
2147483647     = 0111 1111 1111 1111 1111 1111 1111 1111
-1             = 1111 1111 1111 1111 1111 1111 1111 1111
-2147483648    = 1000 0000 0000 0000 0000 0000 0000 0000

最高位为 0 时,表示 0 到 2^31-1。
最高位为 1 时,表示 -2^31 到 -1。
因此 32 位二进制补码的范围是 -2^31 到 2^31-1,并且 0 只有一种表示。

“原码中有 +0 和 -0”可以用来对比不同编码方式,但不应说补码是把原码的 -0 “拿来”表示最小值。更准确的理解是:n 位比特模式在补码中按模 2^n 解释,于是自然得到一个非对称范围。

img

博客:Luuuuyang

对 +0、-0 的理解

以 8 位计算机存储为例

img

img

总结

见一个学一个

参考

https://blog.csdn.net/HPU_LY/article/details/83995407

【计算机组成原理】对原码与补码的理解_Luuuuyang的博客-CSDN博客

https://zh.wikipedia.org/zh-han