编码
- 十进制数的二进制表示法
- 原码
- 反码
- 补码
- 移码
当然,你得了解进制转换
真值
很简单,就是原来的值的意思
原码
假如一个十进制数是
10
10
10
则它的二进制是
1010
1010
1010
位置 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
二进制 | 1 1 1 | 0 0 0 | 1 1 1 | 0 0 0 |
你有没有发现少了一点东西?
符号位
改进一下 符号位正数为
0
0
0 负数为
1
1
1
位置 | 符号位 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
二进制 | 0 0 0 | 1 1 1 | 0 0 0 | 1 1 1 | 0 0 0 |
OK 这就是原码
十进制 | 二进制原码 |
---|---|
3 3 3 | 011 011 011 |
2 2 2 | 010 010 010 |
1 1 1 | 001 001 001 |
0 0 0 | 000 000 000或 100 100 100 |
− 1 -1 −1 | 101 101 101 |
− 2 -2 −2 | 110 110 110 |
− 3 -3 −3 | 111 111 111 |
反码
顾名思义,就是把原码除符号位外把每一位求反(建议你学一下位运算)
当然,只有在负数的时候才能这样做
当真值是正数是,原码就是反码
比如
原码
1001
1001
1001->反码
1110
1110
1110
原码
0001
0001
0001->反码
0001
0001
0001
有什么好处?
试一下二进制加法
十进制
(
−
2
)
+
2
(-2)+2
(−2)+2
二进制原码
110
+
010
110+010
110+010
二进制反码
101
+
010
101+010
101+010
+ | 1 1 1 | 0 0 0 | 1 1 1 |
---|---|---|---|
+ | 0 0 0 | 1 1 1 | 0 0 0 |
= | 1 1 1 | 1 1 1 | 1 1 1 |
原码是不能直接进行加法的
反码解决了这个问题
但是 在反码
0
0
0有两种表示方法
000
000
000和
111
111
111
十进制 | 二进制反码 |
---|---|
3 3 3 | 011 011 011 |
2 2 2 | 010 010 010 |
1 1 1 | 001 001 001 |
0 0 0 | 000 000 000或 111 111 111 |
− 1 -1 −1 | 110 110 110 |
− 2 -2 −2 | 101 101 101 |
− 3 -3 −3 | 100 100 100 |
补码
就是在反码的基础上
+
1
+1
+1 -> 只有真值是负数时才能这么做
有什么好处?
- 0 0 0只有一种表示方法 即 000 000 000
- 范围更大 100 100 100代表 − 4 -4 −4
十进制 | 二进制补码 |
---|---|
3 3 3 | 011 011 011 |
2 2 2 | 010 010 010 |
1 1 1 | 001 001 001 |
0 0 0 | 000 000 000 |
− 1 -1 −1 | 111 111 111 |
− 2 -2 −2 | 110 110 110 |
− 3 -3 −3 | 101 101 101 |
− 4 -4 −4 | 100 100 100 |
移码
不常用,原理和补码一样,就是在补码的基础上
把符号位取反
有什么好处?
0
0
0只有一种表示方法 即
100
100
100
很简单,对不对
总结
十进制 | 二进制原码 | 二进制反码 | 二进制补码 |
---|---|---|---|
3 3 3 | 011 011 011 | 011 011 011 | 011 011 011 |
2 2 2 | 010 010 010 | 010 010 010 | 010 010 010 |
1 1 1 | 001 001 001 | 001 001 001 | 001 001 001 |
0 0 0 | 000 000 000或 100 100 100 | 000 000 000或 111 111 111 | 000 000 000 |
− 1 -1 −1 | 101 101 101 | 110 110 110 | 111 111 111 |
− 2 -2 −2 | 110 110 110 | 101 101 101 | 110 110 110 |
− 3 -3 −3 | 111 111 111 | 100 100 100 | 101 101 101 |
− 4 -4 −4 | 无 | 无 | 100 100 100 |
所以,补码最常见