将数字按顺序排列成数位,并遵照某种由低位到高位进位方式表示数值的方法,称作 进位计数制。
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