二进制八进制十进制和十六进制关系.docx
《二进制八进制十进制和十六进制关系.docx》由会员分享,可在线阅读,更多相关《二进制八进制十进制和十六进制关系.docx(29页珍藏版)》请在冰豆网上搜索。
二进制八进制十进制和十六进制关系
二进制、八进制、十进制和十六进制关系
为什么需要八进制和十六进制?
由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。
但二进制数太长了。
面对太长的数进行思考或操作,没有人会喜欢。
用16进制或8进制可以解决这个问题。
因为,进制越大,数的表达长度也就越短。
不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢?
因为2、8、16,分别是2的1次方、3次方、4次方。
这一点使得三种进制之间可以非常直接地互相转换。
8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。
假设有人问你,十进数1234为什么是一千二百三十四?
你尽可以给他这么一个算式:
权值
1
2
3
4
权位
3
2
1
0
1234=1*103+2*102+3*101+4*100
假设有人问你,二进数10,0000为什么是十进制的32?
你尽可以给他这么一个算式:
权值
1
0
0
0
0
0
权位
5
4
3
2
1
0
32=1*25+0*24+0*23+0*22+0*21+0*20
可以看出,所有进制换算成10进制,关键在于三个因素:
进制基数、权位和权值。
如何将二、八、十六进制数转换为十进制数。
(一)二进制数转换成十进制数
由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,从最后一位开始算,依次列为第0、1、2...n位,第n位的数(0或1)乘以基数2的n次方,然后按十进制加法规则求和,得到的结果就是答案。
这种做法称为"按权相加"法。
例1:
(01100100)2=(100)10
计算过程:
0*20+0*21+1*22+1*23+0*24+1*25+1*26+0*27=
0乘以多少都是0,所以也可直接跳过值为0的位:
1*22+1*23+1*25+1*26=100
例2:
(1011.01)2=(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10=(8+0+2+1+0+0.25)10=(11.25)10
例3:
(101.101)2=(5.625)10
(二)8进制数转换为10进制数,也按"按权相加"法,只将基数换成8即可。
例:
(1507)8=(839)10
计算过程:
1*83+5*82+0*81+7*80=839
(三)16进制数转换成10进制数,也按"按权相加"法,只将基数换成16即可。
例:
(2AF5)16=(10997)10,
计算过程:
2*163+A*162+F*161+5*160=10997(A表示10,F表示15)
附表1十进制与二进制、八进制、十六进制关系表
10进制
2进制
8进制
16进制
0
00000000
0
0
20
1
00000001
1
1
21
2
00000010
2
2
3
00000011
3
3
22
4
00000100
4
4
5
00000101
5
5
6
00000110
6
6
7
00000111
7
7
23
8
00001000
10
8
9
00001001
11
9
十
10
00001010
12
A
11
00001011
13
B
12
00001100
14
C
13
00001101
15
D
14
00001110
16
E
15
00001111
17
F
24
16
00010000
20
10
17
00010001
21
11
18
00010010
22
12
19
00010011
23
13
20
00010100
24
14
21
00010101
25
15
22
00010110
26
16
23
00010111
27
17
24
00011000
30
18
25
00011001
31
19
26
00011010
32
1A
27
00011011
33
1B
28
00011100
34
1C
29
00011101
35
1D
30
00011110
36
1E
31
00011111
37
1F
25
32
00100000
40
20
33
00100001
41
21
34
00100010
42
22
35
00100011
43
23
36
00100100
44
24
37
00100101
45
25
38
00100110
46
26
39
00100111
47
27
40
00101000
50
28
41
00101001
51
29
42
00101010
52
2A
43
00101011
53
2B
44
00101100
54
2C
45
00101101
55
2D
46
00101110
56
2E
47
00101111
57
2F
48
00110000
60
30
49
00110001
61
31
50
00110010
62
32
51
00110011
63
33
52
00110100
64
34
53
00110101
65
35
54
00110110
66
36
55
00110111
67
37
56
00111000
70
38
57
00111001
71
39
58
00111010
72
3A
59
00111011
73
3B
60
00111100
74
3C
61
00111101
75
3D
62
00111110
76
3E
63
00111111
77
3F
26
64
01000000
100
40
65
01000001
101
41
66
01000010
102
42
67
01000011
103
43
68
01000100
104
44
69
01000101
105
45
70
01000110
106
46
71
01000111
107
47
72
01001000
110
48
73
01001001
111
49
74
01001010
112
4A
75
01001011
113
4B
76
01001100
114
4C
77
01001101
115
4D
78
01001110
116
4E
79
01001111
117
4F
80
01010000
120
50
81
01010001
121
51
82
01010010
122
52
83
01010011
123
53
84
01010100
124
54
85
01010101
125
55
86
01010110
126
56
87
01010111
127
57
88
01011000
130
58
89
01011001
131
59
90
01011010
132
5A
91
01011011
133
5B
92
01011100
134
5C
93
01011101
135
5D
94
01011110
136
5E
95
01011111
137
5F
96
01100000
140
60
97
01100001
141
61
98
01100010
142
62
99
01100011
143
63
百
100
01100100
144
64
101
01100101
145
65
102
01100110
146
66
103
01100111
147
67
104
01101000
150
68
105
01101001
151
69
106
01101010
152
6A
107
01101011
153
6B
108
01101100
154
6C
109
01101101
155
6D
110
01101110
156
6E
111
01101111
157
6F
112
01110000
160
70
113
01110001
161
71
114
01110010
162
72
115
01110011
163
73
116
01110100
164
74
117
01110101
165
75
118
01110110
166
76
119
01110111
167
77
120
01111000
170
78
121
01111001
171
79
122
01111010
172
7A
123
01111011
173
7B
124
01111100
174
7C
125
01111101
175
7D
126
01111110
176
7E
27-1
127
01111111
177
7F
27
128
0000000010000000
200
80
129
0000000010000001
201
81
130
0000000010000010
202
82
28
256
0000000100000000
400
100
29
512
0000001000000000
1000
200
千
1000
0000001111101000
1750
3E8
210(KB)
1024
0000010000000000
2000
400
211
2048
0000100000000000
4000
800
212
4096
0001000000000000
10,000
1,000
213
8192
0010000000000000
20,000
2,000
万
10,000
0010011100010000
23,420
2,710
214
16,384
0100000000000000
40,000
4,000
215-1
32,767
0111111111111111
77,777
7,FFF
215
32,768
00000000000000001000000000000000
100,000
8,000
216-1
65,535
00000000000000001111111111111111
177,777
F,FFF
216
65,536
00000000000000010000000000000000
200,000
10,000
十万
100,000
00000000000000011000011010100000
303,240
18,6A0
百万
1,000,000
00000000000011110100001001000000
3,641,100
F4,240
220(MB)
1,048,576
00000000000100000000000000000000
4,000,000
100,000
千万
10,000,000
00000000100110001001011010000000
46,113,200
989,680
亿
100,000,000
00000101111101011110000100000000
575,360,400
5,F5E,100
十亿
1,000,000,000
00111011100110101100101000000000
7,346,545,000
3B,9AC,A00
230(GB)
1,073,741,824
01000000000000000000000000000000
10,000,000,000
40,000,000
231-1
2,147,483,647
01111111111111111111111111111111
17,777,777,777
7F,FFF,FFF
231
2,147,483,648
64位
20,000,000,000
80,000,000
如何将十进制数转换为二、八、十六进制数。
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
(一)十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。
具体做法是:
用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
例一:
(168)10=(10101000)2
计算过程:
2|168
2|84……0
2|42……0
2|21……0
2|10……1
2|5……0
2|2……1
2|1……0
0……1
例二:
(89)10=(1011001)2
2|89
2|44……1
2|22……0
2|11……0
2|5……1
2|2……1
2|1……0
0……1
(二)十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。
具体做法是:
用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
例一:
(0.125)10=(0.001)2
计算过程:
第一步:
将0.125乘以2,得0.25,则整数部分为0,小数部分为0.25;
第二步:
将小数部分0.25乘以2,得0.5,则整数部分为0,小数部分为0.5;
第三步:
将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0;
最后一步:
读数,从第一位读起,读到最后一位,即为0.001。
例二:
(0.625)10=(0.101)2
0.625×2
1.25×2
0.5×2
1.0
例三:
将0.45转换为二进制(保留到小数点第四位)
依次乘以2,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。
这个也是计算机在转换中会产生误差,但是由于保留位数很多,精度很高,所以可以忽略不计。
最后得出结果:
(0.45)10≈(0.0111)2
(三)10进制数转换为8进制数
10进制数转换成8进制的方法,和转换为2进制的方法类似,惟一变化:
除数由2变成8。
①整数部分
方法:
除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。
②小数部分
方法:
乘8取整法,即将小数部分乘以8,然后取整数部分,剩下的小数部分继续乘以8,然后取整数部分,剩下的小数部分又乘以8,一直取到小数部分为零为止。
如果永远不能为零,就同十进制数的四舍五入一样,暂取个名字叫3舍4入。
例一:
(120)10=(170)8
计算过程:
8|120
8|15……0
8|1……7
0……1
例二:
(5621)10=(12765)8转为八进制
计算过程:
8|5621
8|702……5
8|87……6
8|10……7
8|1……2
0……1
例三:
(796.703125)10=(1434.55)8
(四)10进制数转换成16进制
方法:
和转换为2进制的方法类似,惟一变化:
除数由2变成16。
例一:
(120)10=(78)16
计算过程:
8|120
8|7……8
0……7
例二:
(76521)10=(12AE9)16
16|76521
16|4782……9
16|298……14
16|18……10
16|1……2
0……1
二进制数与八进制、十六进制数互换
首先,我们需要了解一个数学关系,即23=8,24=16,而八进制和十六进制是用这种关系衍生而来的,即用三位二进制表示一位八进制,用四位二进制表示一位十六进制数。
接着,记住4个数字8、4、2、1(23=8、22=4、21=2、20=1)。
现在我们来练习二进制与八进制之间的转换。
(一)二进制与八进制之间的转换
二进制与八进制间的关系
二进制
000
001
010
011
100
101
110
111
八进制
0
1
2
3
4
5
6
7
(1)二进制转换为八进制
方法:
取三合一法,即从小数点位置开始,整数部分向左,小数部分向右,每三位二进制为一组,如果无法凑足三位,可以在整数的最高位、小数的最低位添0,凑足三位。
接着将这三位二进制按权相加,得到的数就是一位八位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的八进制数。
例一:
(10110.0011)2=(26.14)8
计算过程:
010110.001100
26.14
例二:
(1101.1)2=(15.4)8
例三:
(101110.101)2=(56.5)8
(2)将八进制转换为二进制
方法:
取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧。
首先,将八进制按照从左到右,每位展开为三位,小数点位置不变;然后,将每位展开为22,21,20(即4、2、1)三位配a、b、c(a=1或者a=0,b=1或者b=0,c=1或者c=0)去做凑数,即a×22+b×21+c×20=该位上的数,将a、b、c排列就是该位的二进制数;接着,将每位上转换成二进制数按顺序排列;最后,就得到了八进制转换成二进制的数字。
例一:
(37.416)8=(11111.10000111)2
计算过程:
37.416
011111.100001110
例二:
(67.54)8=(110111.1011)2
(二)二进制与十六进制的转换
二进制与十六进制的关系
2进制
0000
0001
0010
0011
0100
0101
0110
0111
16进制
0
1
2
3
4
5
6
7
2进制
1000
1001
1010
1011
1100
1101
1110
1111
16进制
8
9
A10
B11
C12
D13
E14
F15
方法:
与二进制与八进制转换相似,只不过是一位(十六)与四位(二进制)的转换,下面具体讲解
(1)二进制转换为十六进制
方法:
取四合一法,即从二进制的小数点位置开始,整数部分向左,小数部分向右,每四位二进制为一组,如果无法凑足四位,可以在整数的最高位、小数的最低位添0,凑足四位。
接着将这四位二进制按权相加,得到的数就是一位十六位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。
例一:
(1100001.111)2=(61.E)16
计算过程:
01100001.1110
61.E
例二:
(101011.101)2=(2B.A)16
例三:
(11101001.1011)2=(E9.B)16
(2)将十六进制转换为二进制
方法:
取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。
例一:
(5DF.9)16=(10111011111.1001)2
计算过程:
5DF.9
010*********
例二:
(6E.2)16=(110110.001)2
原码、反码、补码
我们已经知道计算机中,所有数据最终都是使用二进制数表达。
一个负数如何用二进制表达?
在计算机中,负数以其正值的补码形式表达。
什么叫补码呢?
这得从原码,反码说起。
原码:
一个整数,按照绝对值大小转换成的二进制数,称为原码。
反码:
将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:
原为1,得0;原为0,得1。
(1变0;0变1)
补码:
反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
负值的十进制、二进制、八进制、十六进制关系转换方法
通过上面原码、反码和补码的关系,我们知道对于有符号整数,其在内存中最左边的一位表示符号位。
如果该位为0,则说明该数为正;若为1,则说明该数为负。
也就是说:
最高位为符号位,应该观察最高位,判断符号的正负。
(一)负值的2进制转10进制方法
观察权值0的上一位,如果是1,就以它作为权位n,公式为-1*2n+0*2n-1+…+m*20(m代表权值1或0)
(二)负值的8进制转10进制方法
观察权值,找出最高位满足2进制下不含0的最高位,以它为权位n,将该权值按2进制进位(如1进位为2,3进位为4,7进位为8),公式为-(K-m)*8n+…+m*80(K代表进位后的值,m代表不进位的权值)
(三)负值的16进制转10进制方法
观察权值,找出最高位满足2进制下不含0的最高位,以它