1、计算机在任何情况下都只能识别二进制

2、计算机在底层存储数据的时候,一律存储的是“二进制的补码形式”,计算机采用补码形式存储数据的原因是:补码形式效率最高。

3、记住:对于一个正数来说:二进制原码、反码、补码是同一个,完全相同。

int i = 1;

对应的二进制源码:00000000 00000000 00000000 00000001

对应的二进制反码:00000000 00000000 00000000 00000001

对应的二进制补码:00000000 00000000 00000000 00000001

对于一个负数来说:二进制原码、反码、补码是什么关系呢

byte i = -1

对应的二进制源码:10000001

对应的二进制反码(符号位不变,其它位取反):11111110

对应的二进制补码(反码 1):11111111

下面我们通过题目来练习一下,请输出以下代码打印结果:

byte b = (byte)150; System.out.println(b);

我们先通过运行程序看下结果

深入理解原码反码补码(源码反码补码其实真的很简单)(1)

最终结果为-106

我们慢慢来分析下原因:

1、整数150已经超过了byte类型的取值范围,所以强转的时候会出现精度损失的情况;

2、150的二进制:00000000 00000000 00000000 10010110

3、int是4个字节,byte是1个字节,所以需要截取掉前3个字节:10010110

4、正数的源码,反码,补码都一样;现在的10010110是一个负数,所以我们要经过一轮的转换才可以得到它的源码

补码:10010110

号码:10010101

源码:11101010

11101010 = 64 32 8 2 = 106

二进制的最左边的一位代表正负数,1:负数,0:正数

所以为-106

,