1.二进制在内存中的不同表现形式
原码/反码/补码
2.正数的原码/反码/补码
9---->int类型----->占用4个字节---->1个字节就是8位 ----> 总共占用32位
00000000 00000000 00000000 00001001
对于正数来说,原码/反码/补码都他妈一样的
正数的原码/反码/补码三码合一
3.负数的原码/补码/反码
-9---->int类型----->占用4个字节---->1个字节就是8位 ----> 总共占用32位
10000000 00000000 00000000 00001001
二进制的最高位我们称之为符号位,如果是0,代表是一个正数,如果是1,代表是一个负数
3.1负数的原码就是负数的二进制
10000000 00000000 00000000 00001001
3.2负数的反码就是负数的二进制除了最高位按位取反
11111111 11111111 11111111 11110110
3.3负数的补码就是负数的反码+1
11111111 11111111 11111111 11110110+1=
11111111 11111111 11111111 11110111
1.为什么计算机要有原码,反码,补码
答:计算机只能做加法运算
1+1--> 1+1
1-1--> 1+(-1)
3*3--> 3+3+3
9/3 --> 9+(-3)+(-3)+(-3)
需求:要求计算 1-1的结果
//先用1的原码和-1的原码进行计算
0000 0000 0000 0000 0000 0000 0000 0001 1 的 原码
+ 1000 0000 0000 0000 0000 0000 0000 0001 -1 的 原码
--------------------------------------------------------------------------------
1000 0000 0000 0000 0000 0000 0000 0010 -2的原码
//先用1的反码和-1的反码进行计算
0000 0000 0000 0000 0000 0000 0000 0001 1 反码
+ 1111 1111 1111 1111 1111 1111 1111 1110 -1 的反码
--------------------------------------------------------------------------------------------
1111 1111 1111 1111 1111 1111 1111 1111 反码
1000 0000 0000 0000 0000 0000 0000 0000 -0原码
//先用1的补码和-1的补码进行计算
0000 0000 0000 0000 0000 0000 0000 0001 1的补码
+ 1111 1111 1111 1111 1111 1111 1111 1111 -1的补码
---------------------------------------------------------------------------------------
1 0000 0000 0000 0000 0000 0000 0000 0000
因为只能存储32位,所以第33位的数据被丢弃
所以结果是
0000 0000 0000 0000 0000 0000 0000 0000 0 √
需要知道的东西:
1.在计算机中存储的所有数据都是补码
2.在计算机中参与运算的都是补码
3.如果计算的结果是一个正数,那么直接将计算的结果转换为十进制就是我们想要的结果
如果计算的结果是一个负数,那么需要将计算的结果转换为原码,然后再转换为十进制才是我们想要的结果
4.原码如何转换为反码
符号位不变,其他按位取反
5.反码如何转换为补码
反码+1
6.补码如何转换为反码
补码-1
7.反码如何转换为原码
符号位不变,其他取反
计算机中参与运算的数据都是补码哦
9 - 6 ---> 9 + (-6)
9的原码:0000 0000 0000 0000 0000 0000 0000 1001
9的反码:0000 0000 0000 0000 0000 0000 0000 1001
9的补码:0000 0000 0000 0000 0000 0000 0000 1001
-6的原码:1000 0000 0000 0000 0000 0000 0000 0110
-6的反码:1111 1111 1111 1111 1111 1111 1111 1001
-6的补码:1111 1111 1111 1111 1111 1111 1111 1010
9的补码: 0000 0000 0000 0000 0000 0000 0000 1001
+ -6的补码:1111 1111 1111 1111 1111 1111 1111 1010
---------------------------------------------------------------------------------------
1 0000 0000 0000 0000 0000 0000 0000 0011
如果计算的结果是一个正数,那么直接将计算的结果转换为十进制就是我们想要的结果:3
4-6 ----> 4+ (-6)
4的原码:0000 0000 0000 0000 0000 0000 0000 0100
4的反码:0000 0000 0000 0000 0000 0000 0000 0100
4的补码:0000 0000 0000 0000 0000 0000 0000 0100
-6的原码:1000 0000 0000 0000 0000 0000 0000 0110
-6的反码:1111 1111 1111 1111 1111 1111 1111 1001
-6的补码:1111 1111 1111 1111 1111 1111 1111 1010
4的补码:0000 0000 0000 0000 0000 0000 0000 0100
+ -6的补码:1111 1111 1111 1111 1111 1111 1111 1010
------------------------------------------------------------------------------------
结果: 1111 1111 1111 1111 1111 1111 1111 1110
计算的结果是一个负数,那么需要将计算的结果转换为原码,然后再转换为十进制才是我们想要的结果:
1111 1111 1111 1111 1111 1111 1111 1101
1000 0000 0000 0000 0000 0000 0000 0010
结果:-2