且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

进位计数制及其转换

更新时间:2022-08-17 07:47:03

 

十进制数

进位计数制是一种计数的方法,习惯上最常用的是十进制计数法。十进制数的每位数可以用下列10个数码之一来表示:0123456789。十进制数的基数为10,基数表示进位制所具有的数码的个数。

十进制数的计数规则是“逢十进一”,也就是说,每位累计不能超过9,计满10就应向高位进1

N10=(an-1an-2…a1a0a-1a-2…a-m)10

(N)10=an-1*10n-1+an-2*10n-2+…+a1*101+a0*100+a-1*10-1+a-2*10-2+…+a-m*10-m

1.2.2二进制数、把进制数和十六进制数

计算机中为了便于存储及计算的物理实现,采用了二进制。二进制数的基数为2,只有01两个数码,其计数规则是“逢二进一”,即每位计满2就向高位进1.它的各位的权是以2i表示的。

N2=(an-1an-2…a1a0a-1a-2…a-m)2

(N)2=an-1*2n-1+an-2*2n-2+…+a1*21+a0*20+a-1*2-1+a-2*2-2+…+a-m*2-m

 

 

把进制数的基数是8,采用的数码是01234567。把进制数的计数规则是“逢八进一”,它的各位的权是以8i表示的。通常,对八进制数的表示,可以在数字的右下角标注8O,但在C语言中是在数的前面加数字O表示。

 

把进制数的基数是16,采用的数码是0123456789ABC

DEF。其中ABCDEF分别表示十进制数数字101112131415。十六进制的计数规则是“逢十六进一”,它的各位的权是以16i表示的。通常,对十六进制的数的表示,可以在数字的右下角标注16H,但在C语言中是在数的面前加数字0和字母X0X来表示。

 

 

由此得出:十进制、八进制、二进制与十六进制的特征对照表如表所示:

 

进制

数码

计数规则

数的表示法

十进制

0~9

逢十进一

123410

二进制

01

逢二进一

1012

八进制

0~7

逢八进一

34678

十六进制

0~9A~F

逢十六进一

46AF16

 

 

 

<>二进制数和十进制数的转换

1.       二进制转换为十进制数

例如:

11101.012=1*24+1*23+1*22+0*21+1*20+0*2-1+1*2-2=16+8+4+0+1+0+0.25=29.2510

 

2.       十进制转换为二进制数

1)整数部分转换

把要转换的十进制数的整数部分不断除以基数2,并记下余数,直到商为0为止。

N10=(123)10

123/2=61          (a0=1)                          最低整数位

61/2=30            (a1=1)

30/2=15            (a2=0)

15/2=7               (a3=1)

7/2=3                 (a4=1)

3/2=1                 (a5=1)

1/2=0                 (a6=1)                          最高整数位

(N)10=(1111011)2

2)小数部分转换

N10=(0.468)10

<>二进制数、八进制数和十六进制数的转换

(2)小数部分转换

对于被转换的十进制数的小数部分则应不断乘以基数2,并记下其整数部分,直到结果的小数部分为0为止。

N10=0.94510

N10=0.812510

0.8125*2=1.625       (b1=1)                最高小数位

0.625*2=1.25  (b2=1)

0.25*2=0.5       (b3=0)

0.5*2=1.0         (b4=1)                最低小数位

(N)10=(0.1101)2

在十进制的小数部分转换中,有时连续乘以2不一定能使小数部分等于0,这说明该十进制小数不能用有限位二进制小数表示。这时,只要取足够多的位数,使其误差达到所要求的精度就可以了。

(N)10=(123)10

123/8=15         (a0=3)       最低整数位

15/8=1               (a1=7)

1/8=0                 (a2=1)       最高整数位

(N)10=(165)8

(N)10=(0.8125)8

0.8125*8=6.5  (b1=6)最高小数位

0.5*8=4.0         (b2=4)最低小数位

(N)10=(0.64)8

二进制数、八进制数和十六进制数的转换

八进制数的基数是88=23),十六进制数的基数是1616=24)。二进制数、八进制数和十六进制数之间具有2的整指数倍的关系,因而可直接进行转换。

 

1.二进制数-->八进制数

 

从小数点开始,分别向左右按3位分组转换成对应的八进制数字字符,最后不满3位的,则需补0

 

具体方法为:

 

二进制数:  001  101  101  .   101   010

八进制数:   1       5    5         5     2

 

(001101101.101010)2=(155.52)8

 

 

八进制数-->二进制数

 

将每位八进制数用3位二进制数表示即可。

 

将八进制数(345.648转换成二进制数

 

具体方法为:

八进制数:     3       4       5 . 6    4

二进制数:     011     100     101  110   100

 

345.648=11100101.11012

 

3.二进制数-->十六进制数

 

从小数点开始,分别向左、右按4位分组转换成对应的十六进制数字字符,最后不满4位的,则需补0.

 

将二进制数(1101101.101012转换成十六进制数

具体方法为:

二进制数:0110     1101         .        1010         1000

十六进制数: 6       D             A       8

1101101.101012=(6D.A8)16

 

 

4.十六进制数-->二进制数

 

将每位十六进制数用4二进制数表示即可。

将十六进制数(A8D.6C16 转换成二进制数。

具体方法:

十六进制数:         A                8                D                .                 6                C

二进制数:        1010   1000        1101           0110     1100

 

(A8D.6C)16=(101010001101.011011)2

 

其实,BCD编码在***称之为“8421,用8421码二进制数与八进制数、十进制数、十六进制数相互转换










本文转自 chen138 51CTO博客,原文链接:http://blog.51cto.com/chenboqiang/407314,如需转载请自行联系原作者