进制转换

阅读量: 157 编辑

将数字按顺序排列成数位,并遵照某种由低位到高位进位方式表示数值的方法,称作 进位计数制

1、常见进制

十进制:

十进制计数制由 0、 1、 2、 3、 4、 5、6、 7、 8、 9共 10个数字符号组成。相同数字符号在不同的数位上表示不同的数值,每个数位计满十就向高位进一,即“逢十进一”。

表示为:(2310)10

二进制:

计算机主要是通过二进制进行计算和存储的。

二进制计数制由 0 和 1 共 2 个数字符号组成。相同数字符号在不同的数位上表示不同的数值,每个数位计满二就向高位进一,即“逢二进一”。

表示为:(1101)2

八进制:

八进制计数制由 0、 1、 2、3、 4、 5、 6、 7共 8个数字符号组成。相同数字符号在不同的数位上表示不同的数值,每个数位计满八就向高位进一,即“逢八进一”。

表示为:(7326)8

十六进制:

十六进制数由0、 1、 2、 3、 4、 5、 6、 7、 8、 9、 A、 B、 C、 D、 E和 F共十六个符号组成,“逢十六进一”。不同的是用 A、 B、 C、D、 E和 F分别表示 10、11、 12、 13、 14和 15六个数字符号。

字母的大小写是一样的,比如 A 和 a 都可以表示 10 。

表示为:(a89f)16

2、基数与权

某进制计数制允许选用的基本数字符号的个数称为基数。一般而言, J 进制数的基数为 J,可供选用的基本数字符号有 J 个,分别为 0 到 J -1,每个数位计满 J 就向高位进一,即 “逢 J 进一”。

某进制计数制中各位数字符号所表示的数值,是以基数为底,数字符号所处的位置的序号为指数的整数次幂。整数次幂,可以称为“位权”(简称“权”)。

如:(2321)10

括号外的10表示10进制,2321那就是表示 两千三百二十一。

3表示的位权是:3 乘以 10 的 2次方(2是指数),也就是 3 × 102

2 是怎么来的?从低位往高位数数(右往左数),从0开始,3 对应的正好是 2。

1-0
2-1
3-2
2-3

3、数学与十进制

数学中的 2321 是怎么得到 两千三百二十一 的?

2321 = 2000 + 300 + 20 + 1
     = 2×1000 + 3×100 + 2×10 + 1
     = 2×10×10×10 + 3×10×10 + 2×10 + 1

(2321)10 = 2 * 103 + 3 * 102 + 2 * 101 + 1 * 100

2321是所有位权求和的结果。

2321.45 呢?

小数部分就是 4 * 10-1 + 5 * 10-2

4、转十进制

给出了任意进制数 (KKK.KK) J,当 J 分别为: 2, 8,10 和 16 时各位权值计算,得到十进制数值。

J进制转十进制练习:按权展开求和

(101.11)2 = 1 * 22 + 0 * 21 + 1 * 20 + 1 * 2-1 + 1 * 2-2 = 4 + 0 + 1 + 0.5 + 0.25 = 5.75

(753.24)8 = 7 * 82 + 5 * 81 + 3 * 80 + 2 * 8-1 + 4 * 8-2 = 448 + 40 + 3 + 0.25 + 0.0625 = 491.3125

(231.45)10 = 2 * 102 + 3 * 101 + 1 * 100 + 4 * 10-1 + 5 * 10-2 = 200 + 30 + 1 + 0.4 + 0.5 = 231.45

(d5c.f3)16 = 13 * 162 + 5 * 161 + 12 * 160 + 15 * 16-1 + 3 * 16-2 = 3328 + 80 + 12 + 0.9375 + 0.0117 = 3420.9429

5、C++中进制表示

如何指导上述的转换是否正确?用编程来验证整数部分。(二进制和十六进制浮点文字面量不被C++直接支持)。

int d = 231;     	// 十进制数
int b = 0b101; 		// 二进制数	0b 开头
int o = 0753;		// 八进制 0 开头
int h = 0xd5c;  	// 十六进制数 0x 开头

平时写法,也常在数字后加一缩写字母后缀作为不同进制数的标识:

  • B :二进制数,比如 101B

  • O:八进制数,比如 753O

  • D :十进制数,比如 231D 或者 231

  • H :十六进制数,比如 d5cH

6、十进制转二进制

十进制整数转二进制数:“除以2取余,逆序输出”。

例:(89)10=(1011001)2

十进制小数转二进制数:“乘以2取整,顺序输出”。

例:(0.625)10 = (0.101)2

同理,我们如果十进制转八进制、十六进制也是一样的计算过程。

例:十进制转八进制

(89)10=(131)8

(0.625)10 = (0.5)8

例:十进制转十六进制

(89)10=(59)16

(0.625)10 = (.a)16

总结一下就是:

1、其他进制转十进制:按权展开求和

2、十进制转其他进制:整数除取余,小数乘取整

7、八进制转二进制

8 = 23 ,所以八进制的一个位,可以转换成二进制的3个位;

16 = 24,所以十六进制的一个位,可以转换成二进制的4个位;

例:将八进制的37.416转换成二进制数

结果: (37.416)8 = (11111.10000111)2

例:将二进制的 10110.0011 转换成八进制

从小数点往两边 3 位一组,不够补0。 结果:(10110.0011)2 = (26.14)8

例:将十六进制数5DF.9 转换成二进制:

结果:(5DF.9)16 = (10111011111.1001)2

例:将二进制数1100001.111 转换成十六进制:

从小数点往两边 4 位一组,不够补0。结果:(1100001.111)2 = (61.E)16

爱码岛编程公众号
微信扫码关注
爱码岛编程小程序
微信扫码打开
苏ICP备13052010号
©2023 南京匠成信息科技有限公司