如何将任意进制数转换成十进制?
摘要:本文简要介绍了二进制、八进制、十进制、十六进制,并具体说明了八进制转二进制、十六进制转二进制和十进制转二进制的方法。
进制是一种表示数字的方法,其核心规则是“逢几进一”,比如我们平常说的N进制,实际上就是逢N进一。
一、各进制介绍
(一)二进制
二进制由 0 和 1 组成,逢 2 进 1。其在工程中有以下两种表示形式:
/* 二进制后缀一般用B或b表示 */
1011b
/* 二进制前缀一般用0B或0b表示 */
0B1011
(二)八进制
八进制由 0~7 组成,逢 8 进 1。其在工程中有以下两种表示形式:
/* 八进制后缀一般用O或o表示 */
1234567O
/* 八进制前缀一般用0O或0o表示 */
0O1234567
(三)十进制
十进制由 0~9 组成,逢 10 进1。其在工程中有以下表示形式:
/* 十进制没有前缀,但是有后缀,一般用D或d表示 */
12345D
(四)十六进制
十六进制由 0~F 组成,逢 F 进1。其在工程中有以下表现形式:
/* 十六进制后缀一般用H或h表示 */
345ABCDEFh
/* 十六进制前缀一般用0X或0x表示 */
0x345ABCDEF
二、进制转化
(一)各进制的位权表示法
二进制:
1 0 1 1 0 1b
=1x25 + 0x24 + 1x23 + 1x22 + 0x21 +1x20
=4510
八进制:
0O1 2 3 4 5 6 7
= 1x86 + 2x85 + 3x84 + 4x83 + 5x82 + 6x81 + 7x80
= 34239110
十六进制:
0x 3 A B C D E F
=3x166 + 10x165 + 11x164 + 12x163 + 13x162 + 14x161 + 15x160
=6159102310
(二)十六进制、八进制转二进制
八进制转二进制、十六进制转二进制本质上都是“分组映射”,从 8=23, 16=24这里我们可以看出每一位八进制恰好对应3个二进制位,每一位十六进制恰好对应4个二进制位。其中在进制转换的细节处理中,最容易出错的地方主要集中在补零规则、位宽约束、前导零是否保留以及分组顺序这几方面。
在八进制转二进制中,每一位八进制数(0~7)可直接替换成3位二进制(000~111)。以下是八进制到二进制的映射表:
八进制转二进制映射表
八进制
0
1
2
3
4
5
6
7
二进制
000
001
010
011
100
101
110
111
示例:
八进制 0O 0 1 2 3 4 5 6 7
二进制 = 000 001 010 011 100 101 110 111
在上面示例中,最终的数值有两种写法,一种是000001010011100101110111,另一种则是1010011100101110111,这两种写法的区别只有终值是否将前导0去掉导致最后的位宽表达不同,数值方面并不存在差别。同时单一位八进制数在转换成二进制数的过程中一定要注意转换后的二进制数是 3 位,如果不够三位要补前导0。就比如 2 要写成“010”,而不是“10”。
在十六进制转二进制中,每一位十六进制数(0~F)可直接替换成4位二进制(0000~1111)。以下是十六进制转二进制的映射表:
十六进制转二进制映射表
十六进制
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
二进制
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
示例:
十六进制 0x 3 A B C
二进制 = 0011 1010 1011 1100
在上面示例中,我们可以看出十六进制与八进制在向二进制映射时本质一致,都是基于固定比特宽度的逐位替换。十进制每一位对应 4 bit二进制,不足 4 bit则必须进行前导0补齐。完成映射和拼接后,最终得到的二进制比特序列在数值含义上与八进制转换结果一致,不同之处也仅在于位宽表示是否会被显式保留。
(三)十进制转二进制
十进制转二进制的过程与十六进制转二进制、八进制转二进制不同,因为十进制并不能像十六进制转二进制、八进制转二进制一样可以通过分组映射去转换。
