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 解释,于是自然得到一个非对称范围。

博客:Luuuuyang
对 +0、-0 的理解¶
以 8 位计算机存储为例


总结¶
见一个学一个
参考¶
https://blog.csdn.net/HPU_LY/article/details/83995407