(5)原码反码补码
# (1)概念
计算机的所有数据在底层都是以二进制的[补码]形式存储
实际人们看到的数字是[原码]转化来的
而[原码]是通过[补码]得到的
补码 -> 原码 -> 最后人们看到的数
***进制转换的时候需要先把内存存储的补码拿出来变成原码在进行转换输出***
正数高位补0 负数高位补1(前面空白位全是1)
数字1 00000000 1 正数高位都补0
数字-1 111111111 1 负数高位都补1
原码: 用来转换对应进制
反码: 二进制码0变1,1变0叫做反码,反码用于原码补码之间的转换.(符号位不变)
补码: 用来做数据的存储运算. 补码提出的根源是让计算机底层的实现减法操作(可以表达出一个数的正负)
言外之意:计算机默认只会做加法,例:5+(-3) => 5 - 3
乘法除法:是通过左移和右移 << >> 来实现
# (2)运算
(原码 反码 补码之间的转换 , 符号位不要动)
正数: 原码 = 反码 = 补码
负数: 原码 = 补码取反加1 给补码求原码
负数: 补码 = 原码取反加1 给原码求补码
例:计算-9+5的结果,先分别算处二进制
-9
000000001001 (原码)==>负数的原码前面都是0补位
1111111110110 (反码)==>原码全部取反
1111111110111 (补码)==>反码+1,如果都是1就进一位
5
0000000000101 (正数==>原码 = 反码 = 补码)
1111111110111 -9的补码
000000000101 5的补码
1111111111100 (补码)====>两者补码相加得到新的补码
补码==>取反 + 1 ==> 原码
000000000011 (取反)
000000000100 (加1==> 原码)得到 -4
只保留符号位第一位,剩下中间的位用0填充即可