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 00000001 0000000 -128
最大负值:1 0000001 -1 补码1 1111111
最小负值:1 1111111 -127 补码1 0000001
负数补码范围:10000001~11111111
正数的补码范围:00000001~011111100000000 0的补码10000000 推算:10000000 -101111111 全位数取反 10000000 128
