Hello
为什么byte类型的范围是-128~127
原码
实际二进制的数值 正数:0 0000001
负数 1 0000001
反码
正数的反码依然是其原码,负数的反码是负数原码除符号位以外的按位取反。
补码
实际上计算机真实存储的二进制
正数
在计算机中用原码表示
反码 = 原码
补码 = 原码
负数
在计算机中用原码表示
反码 = 负数原码除符号位以外的按位取反
例 原码 1 0000001
反码 1 1111110
补码 = 负数的反码加1
例 原码 1 0000001
反码 1 1111110
补码 1 1111111
负数的补码第二种运算方式
- -1 取-1绝对值的原码
0 0000001
- 将负数绝对值得原码 每位按位取反(包括符号位)+1 得出负数补码
1 1111110
+1 =1 1111111
注:当我们通过负数原码去结算负数补码时,取反时符号位不参与取反
当我们通过负数绝对值的原码计算补码时,取反时符号位参与取反
验证:计算存储的是补码 在计算机的底层只有加法,没有减法
一切的加减运算 实际上都是补码的相加运算
1 | 0 0000001 |
8位
最大正值:0 1111111
127
补码:0 1111111
最小正值:0 0000001
1
补码0 0000001
0:0 0000000 0
所谓的正0 是实际上的0
规定 补码0 0000000
1 0000000
-128
最大负值:1 0000001
-1 补码1 1111111
最小负值:1 1111111
-127 补码1 0000001
负数补码范围:10000001
~11111111
正数的补码范围:00000001
~0111111
00000000
0的补码10000000
推算:10000000
-101111111
全位数取反 10000000
128