进制学习笔记
进制与编码
一.常用进制的概念
进制 | 基数 | 基数个数 | 权值 | 进位规律 |
---|---|---|---|---|
10进制 | 0,1,2,3,4,5,6,7,8,9 | 10个 | \(10^i\) | 逢十进一 |
2进制 | 0,1 | 2个 | \(2^i\) | 逢二进一 |
8进制 | 0,1,2,3,4,5,6,7 | 8个 | \(8^i\) | 逢八进一 |
16进制 | 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F | 16个 | \(16^i\) | 逢十六进一 |
二.不同进制之间的转化
-
2->10
例如\((1011.01)_2=(1\times2^3+0\times2^2+1\times2^1+1\times2^0+0\times2^{-1}+1\times2^{-2})_{10}\)
\(=(8+0+2+1+0+0.25)_{10}\)
\(=(11.25)_{10}\)
-
10->2
例如\((89)_{10}=(1011001)_2\)
计算过程:
\(89\div2=44......1\)
\(44\div2=22......0\)
\(22\div2=11......0\)
\(11\div2=5........1\)
\(5\div2=2..........1\)
\(2\div2=1..........0\)
\(1\div2=0..........1\)
从下往上取余数的\((89)_{10}=(1011001)_2\)
-
2->8 and 8->2 and 2->16 and 16 ->2
由于这几个进制有很大的关系,所以我们可以用更快的方法来转化。
-
\((37.416)_8=(11111.10000111)_2\)
将这几个数字分别转换为二进制
\((3)_8=(011)_2\)
\((7)_8=(111)_2\)
\((4)_8=(100)_2\)
\((1)_8=(001)_2\)
\((6)_8=(110)_2\)
将它们拼起来就好了。
所以\((37.416)_8=(011111.1000001110)_2=(11111.10000111)_2\)
-
\((10110.011)_2=(26.14)_8\)
把这个数以小数点为起点三位三位的分段,不够分的补上0,我们可以得到
010 -> \((2)_8\)
110 ->\((6)_8\)
001->\((1)_8\)
100->\((4)_8\)
所以\((10110.011)_2=(26.14)_8\)
-
三.二进制的源码、反码、补码
-
原码就是前面一位符号位(正数为0,负数为1)后面跟着这个数的绝对值的二进制。
例如\((-15)_{10}=[(1111)_2]_原\)
所以\((-15)_{10}\)的源码就是\((11111)_2\)
-
反码就是原码除了符号位以外,将它二进制中的每一位都取反得到的二进制码。
例如\([(11111)_2]_原=[(10000)_2]_反\)
-
补码分两种情况,如果原数是正数的话,它的补码就是他的原码。如果原数是负数的话,他的补码就是它反码加一(如果高过最高位了就让它溢出)。
例如\([(10000)_2]_反=[(10001)_2]_补\)
采用补码表示法就可以避免\(+0\)和\(-0\)的不同。