Day47--有符号整数.md
有符号整数是什么?为什么10000000对应的是- 128?
- 有符号整数的概念
- 在计算机中,整数可以分为有符号整数和无符号整数。有符号整数用于表示正数、负数和零,而无符号整数只能表示零和正数。
- 对于有符号整数,最常见的表示方法是使用二进制补码(two's complement)。在这种表示方法中,最高位(最左边的位)被用作符号位。如果符号位是0,表示这个数是正数;如果符号位是1,表示这个数是负数。
byte
类型与二进制补码byte
类型在Java中是8位的有符号整数类型。它的取值范围是从 - 128到127。- 当我们用二进制补码来表示
byte
类型的数时:- 正数的二进制补码就是其本身的二进制表示。例如,
127
的二进制表示是01111111
。 - 负数的二进制补码是通过对其绝对值的二进制表示取反再加1得到的。
- 正数的二进制补码就是其本身的二进制表示。例如,
- 对于
10000000
这个二进制数:- 在8位有符号整数(
byte
类型)的二进制补码表示中,10000000
被解释为- 128
。 - 我们可以这样理解:
- 根据二进制补码的规则,对于负数,要得到其对应的十进制值,先对除符号位外的其他位取反,然后加1,再加上负号。
- 对于
10000000
,除符号位外的其他位都是0,取反后还是0,加1后得到10000000
,对应的十进制值就是- 128
。
- 在8位有符号整数(
当b = 127
(二进制01111111
),执行b+1
得到10000000
,在byte
类型(有符号8位整数)中,10000000
就表示- 128
。