一、基本概念
01. 编码
采用少量的基本符号,选用一定的组合原则,以表示大量复杂多样的信息。
基本符号的种类和这些符号的组合规则是一切信息编码的两大要素。
02. 进位记数制
如果只用 r 个基本符号表示数值,则称为 r 进制(radix-r number system);r 称为该数制的基数(radix)。
特点
每一种数制都有固定的符号集;
每一种数制都是用位置表示法(即处于不同位置的数符所代表的值不同,与它所在位置的权值有关)。
03. 权
各种进位记数制中的权值就是基数的某次幂。
对任何一种进位记数制表示的数都可以写成按权展开的多项式之和。
04. 进位数制公式
Nr =
二、相关图表
01. 计算机常用进位数制的表示
进位制 | 二进制 | 八进制 | 十进制 | 十六进制 |
---|---|---|---|---|
规则 | 逢二进一 | 逢八进一 | 逢十进一 | 逢十六进一 |
基数 | r=2 | r=8 | r=10 | r=16 |
数符 | 0,1 | 0,1,2,3,4,5,6,7 | 0,1,2,3,4,5,6,7,8,9 | 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F |
权 | 2i | 8i | 10i | 16i |
表示符 | B | O | D | H |
二进制数中的一个 0 或 1 称为 1 比特(bit)。
02. 二进制与八进制的对应关系
二进制 | 八进制 |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
03. 二进制与十六进制的对应关系
二进制 | 十六进制 | 二进制 | 十六进制 |
---|---|---|---|
0000 | 0 | 1000 | 8 |
0001 | 1 | 1001 | 9 |
0010 | 2 | 1010 | A |
0011 | 3 | 1011 | B |
0100 | 4 | 1100 | C |
0101 | 5 | 1101 | D |
0110 | 6 | 1110 | E |
0111 | 7 | 1111 | F |
三、数制转换
01. 二进制数 → 十进制数
将二进制数的每一位数乘以它的权,然后将所得的全部值相加。
(100110.101)2
= 1*25 + 0*24 + 0*23 + 1*22 + 1*21 + 0*20 + 1*2-1 + 0*2-2 + 1*2-3
= 32 + 0 + 0 + 4 + 2 + 0 + 0.5 + 0 + 0.125
= (38.625)10
02. 十进制数 → 二进制数
a. 整数部分,除 2 取余;小数部分,乘 2 取整;然后合并。
(37403.2134)10
=> 整数部分推导
=> 37403/2 = 18701 余 1 ↑
=> 18701/2 = 9350 余 1 ↑
=> 9350/2 = 4675 余 0 ↑
=> 4675/2 = 2337 余 1 ↑
=> 2337/2 = 1168 余 1 ↑
=> 1168/2 = 584 余 0 ↑
=> 584/2 = 292 余 0 ↑
=> 292/2 = 146 余 0 ↑
=> 146/2 = 73 余 0 ↑
=> 73/2 = 36 余 1 ↑
=> 36/2 = 18 余 0 ↑
=> 18/2 = 9 余 0 ↑
=> 9/2 = 4 余 1 ↑
=> 4/2 = 2 余 0 ↑
=> 2/2 = 1 余 0 ↑
=> 1/2 = 0 余 1 ↑(最终商为 0 时,逆序开始合并)
=> 1001001000011011
=> 小数部分推导
=> 0.2134*2 = 0.4268 整 0 ↓(顺序开始合并)
=> 0.4268*2 = 0.8536 整 0 ↓
=> 0.8536*2 = 1.7072 整 1 ↓
=> 0.7072*2 = 1.4144 整 1 ↓
=> 0.4144*2 = 0.8288 整 0 ↓
=> 0.8288*2 = 1.6576 整 1 ↓
=> 0.6576*2 = 1.3152 整 1 ↓
=> 0.3152*2 = 0.6304 整 0 ↓(需要提前设定转换精度)
......
=> 0.00110110...
=> 合并
=> (1001001000011011.0011011)2
b. 把一个十进制数写成按二进制数权的大小展开的多项式,并按权值从高到低一次取各项的系数。
(37403.2134)10
=
03. 二进制数 → 八进制数
从小数点起,把二进制数每 3 位分成一组,然后写出每一组的等值八进制数,顺序排列起来就得到所要求的八进制数。
(100101001001011101.11010100101)2
= 100,101,001,001,011,101.110,101,001,100
= 4 ,5 ,1 ,1 ,3 ,5 .6 ,5 ,1 ,4
= (451135.6514)8
04. 八进制数 → 二进制数
将 1 位八进制数用 3 位二进制数表示。
(6254172.117002)8
= 110,010,101,100,001,111,010.001,001,111,000,000,010
= (110010101100001111010.00100111100000001)2
05. 十进制数 → 八进制数
整数部分,除 8 取余;小数部分,乘 8 取整;然后合并。
(38947164.183593)10
=> 整数部分推导
=> 38947164/8 = 4868395 余 4 ↑
=> 4868395/8 = 608549 余 3 ↑
=> 608549/8 = 76068 余 5 ↑
=> 76068/8 = 9508 余 4 ↑
=> 9508/8 = 1188 余 4 ↑
=> 1188/8 = 148 余 4 ↑
=> 148/8 = 18 余 4 ↑
=> 18/8 = 2 余 2 ↑
=> 2/8 = 0 余 2 ↑(最终商为 0 时,逆序开始合并)
=> 224444534
=> 小数部分推导
=> 0.183593*8 = 1.468744 整 1 ↓(顺序开始合并)
=> 0.468744*8 = 3.749952 整 3 ↓
=> 0.749952*8 = 5.999616 整 5 ↓
=> 0.999616*8 = 7.996928 整 7 ↓
=> 0.996928*8 = 7.975424 整 7 ↓
=> 0.975424*8 = 7.803392 整 7 ↓
=> 0.803392*8 = 6.427136 整 6 ↓
=> 0.427136*8 = 3.417088 整 3 ↓(需要提前设定转换精度)
......
=> 0.13577763...
=> 合并
=> (224444534.13577763)8
06. 八进制数 → 十进制数
将八进制数的每一位数乘以它的权,然后将所得的全部值相加。
(674261.173)8
= 6*85 + 7*84 + 4*83 + 2*82 + 6*81 + 1*80 + 1*8-1 + 7*8-2 + 3*8-3
= 196608 + 28672 + 2048 + 128 + 48 + 1 + 0.125 + 0.109375 + 0.005859375
= (227505.240234375)10
07. 十进制数 → 十六进制数
整数部分,除 16 取余;小数部分,乘 16 取整;然后合并。
(92476318.16298)10
=> 整数部分推导
=> 92476318/16 = 5779769 余 14 => E ↑
=> 5779769/16 = 361235 余 9 => 9 ↑
=> 361235/16 = 22577 余 3 => 3 ↑
=> 22577/16 = 1411 余 1 => 1 ↑
=> 1411/16 = 88 余 3 => 3 ↑
=> 88/16 = 5 余 8 => 8 ↑
=> 5/16 = 0 余 5 => 5 ↑(最终商为 0 时,逆序开始合并)
=> 583139E
=> 小数部分推导
=> 0.16298*16 = 2.60768 整 2 => 2 ↓(顺序开始合并)
=> 0.60768*16 = 9.72288 整 9 => 9 ↓
=> 0.72288*16 = 11.56608 整 11 => B ↓
=> 0.56608*16 = 9.05728 整 9 => 9 ↓
=> 0.05728*16 = 0.91648 整 0 => 0 ↓(需要提前设定转换精度)
......
=> 0.29B90...
=> 合并
=> (583139E.29B9)16
08. 十六进制数 → 十进制数
将十六进制数的每一位数乘以它的权,然后将所得的全部值相加。
(4DA561B.FE13A)16
= 4*166 + D*165 + A*164 + 5*163 + 6*162 + 1*161 + B*160 + F*16-1 + E*16-2 + 1*16-3 + 3*16-4 + A*16-5
= 4*166 + 13*165 + 10*164 + 5*163 + 6*162 + 1*161 + 11*160 + 15*16-1 + 14*16-2 + 1*16-3 + 3*16-4 + 10*16-5
= 67108864 + 13631488 + 655360 + 20480 + 1536 + 16 + 11 + 0.9375 + 0.0546875 + 0.000244140625 + 0.0000457763671875+0.0000095367431640625
= 81417755 + 0.9924869537353515625
= (81417755.9924869537353515625)10
09. 二进制数 → 十六进制数
从小数点开始,每 4 位二进制数为一组,将每一组用相应的十六进制数符来表示。
(1101010111000111110.110101011011001101)2
= 0110,1010,1110,0011,1110.1101,0101,1011,0011,0100
= 6 ,A ,E ,3 ,E .D ,5 ,B ,3 ,4
= (6AE3E.D5B34)16
10. 十六进制数 → 二进制数
将 1 位十六进制数用 4 位二进制数表示。
(AEF34B.2CD9)16
= 1010,1110,1111,0011,0100,1011.0010,1100,1101,1001
= (101011101111001101001011.0010110011011001)2
11. 八进制数 → 十六进制数
八进制数 → 二进制数 → 十六进制数
将 1 位八进制数用 3 位二进制数表示;从小数点开始,每 4 位二进制数为一组,将每一组用相应的十六进制数符来表示。
(7126534.1762354)8
= 111,001,010,110,101,011,100.001,111,110,010,011,101,100
= (111001010110101011100.0011111100100111011)2
= 0001,1100,1010,1101,0101,1100.0011,1111,0010,0111,0110
= 1 ,C ,A ,D ,5 ,C .3 ,F ,2 ,7 ,6
= (1CAD5C.3F276)16
12. 十六进制数 → 八进制数
十六进制数 → 二进制数 → 八进制数
将 1 位十六进制数用 4 位二进制数表示;从小数点开始,每 3 位二进制数为一组,将每一组用相应的八进制数符来表示。
(A013F2.C9DB)16
= 1010,0000,0001,0011,1111,0010.1100,1001,1101,1011
= (101000000001001111110010.1100100111011011)2
= 101,000,000,001,001,111,110,010.110,010,011,101,101,100
= 5 ,0 ,0 ,1 ,1 ,7 ,6 ,2 .6 ,2 ,3 ,5 ,5 ,4
= (50011762.623554)8
四、规律总结
01. 非十进制数 → 十进制数
将 r 进制数的每一位数乘以它的权 ri,然后将所得的全部值相加。
02. 十进制数 → 非十进制数
整数部分(除 r 取余)和小数(乘 r 取整)部分分别转换,然后再合并。
没有评论:
发表评论