进制
NULL–2020.03.13整理笔记
进制(System)
二进制:Binary system,简写BIN。
- 写作:10010B、(10010)2、
八进制:Octal number system,简写OCT。
- 写作:22O或者22Q、(22)8
十进制:Decimal system,简写DEC。
- 写作:18D、(18)10
十六进制:Hexadecimal,简写HEX。
- 写作:12H、(12)16
在C语言中,整数有三种表示方法,分别是八进制、十进制、十六进制,这三种在使用中是不能用后缀O、D、H的。
十进制不需要前缀,如:11、23、35
八进制需要以0开头,如:015、026、077
十六进制以0X或者0x开头,如:0xFF、0xB45、0xFF91
重要概念:位值(权值)(由位置决定数值大小的值)
Value = (S)R = ∑ i = − m n \sum_{i=-m}^n ∑i=−mnKi × \times ×Ri Ki ∈ \in ∈{0,1…,R-1}
n = 整数位数-1 m = 小数位数
R:数制的基数 Ri:权(由位置决定的值)
权的概念:整数部分从右往左i = 0,1,2,3…;小数部分从左往右i = -1,-2,-3…
-
二进制(Binary)[ˈbaɪnəri]
-
B转O
-
以小数点为界,分别向左、向右每三位一组进行分割,不足三位补0。写出每三位对应的八进制数。
例:1001010.1011B = 001 001 010 . 101 100B = 1 1 2 . 5 4Q
-
-
B转D
-
整数部分:按权展开法
例:11010B = 1 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 = 26D
-
小数部分:按权展开法
例:.1010B = 1 * 2-1 + 0 * 2-2 + 1 * 2-3 + 0 * 2-4 = 0.625D
-
-
B转H
-
以小数点为界,分别向左、向右每四位一组进行分割,不足四位补0。写出每四位对应的十六进制数。
例:1001010.1011B = 0100 0101 . 1011B = (4 5 . B)16
-
-
-
八进制(Octal)['ɔktl]
-
O转B
-
以小数点为界,分别向左、向右每一位写为三位二进制数。
例:112.54Q = 001 001 010 . 101 100B = 1001010.1011B
-
-
O转D
-
整数部分:按权展开法
例:112Q = 1* 82 + 1* 81 + 2 * 80 = 74D
-
小数部分:按权展开法
例:.54 = 5 * 8-1 +4 * 8-2 = 0.6875D
-
-
O转H
-
先转为二进制,然后二进制转十六进制。
例:112Q =001 001 010B = 45H
-
-
-
十进制(Decimal)[ˈdesɪml]
-
D转B
-
整数部分:连除法,不断除以基数2,倒序去余数(十进制整数可以精准转换为二进制整数)
例:
75 / 2 =37…余1
37 / 2 = 18…余1
18 / 2 = 9…余0
9 / 2 = 4…余1
4 / 2 = 2…余0
2 / 2 = 1…余0
1 / 2 = 0…余1
75D = 1001011B
-
小数部分:连乘法,不断乘以基数2,正序取整数部分进位(一般情况十进制小数不能用有限二进制表示,实际计算时,根据精度要求取m位)
例:
0.6531 * 2 = 1.3062…1
0.3062 * 2 = 0.6124…0
0.6124 * 2 = 1.2248…1
0.2248 * 2 = 0.4496…0
0.4496 * 2 = 0.8992…0
0.6531D ≈ \approx ≈ 0.10100B
-
-
D转O
-
整数部分:连除法,不断除以基数8,倒序去余数
例:
75 / 8 = 9…余3
9 / 8 = 1…余1
1 / 8 = 0…余1
75D = 113Q
-
小数部分:连乘法,不断乘以基数8,正序取整数部分进位
例:
0.6531 * 8 = 5.2248…5
0.2248 * 8 = 1.7984…1
0.7984 * 8 = 6.3872…6
0.3872 * 8 = 3.0976…3
0.0976 * 8 = 0.7808…0
0.6531D ≈ \approx ≈ 0.51630Q
-
也可以先转为二进制然后再转八进制(可能更快一点)
-
-
D转H
-
整数部分:连除法,不断除以基数16,倒序去余数
例:
75 / 16 = 4…余11
4 / 16 = 0…余4
75D = (4B)16
-
小数部分:连乘法,不断乘以基数16,正序取整数部分进位
例:
0.6531D * 16 = 10.4496…A
0.4496 * 16 = 7.1936…7
0.1936 * 16 = 3.0976…3
0.0976 * 16 = 1.5616…1
0.5616 * 16 = 8.9856…8
0.6531D ≈ \approx ≈ (0.A7318)16
-
也可以先转为二进制然后再转十六进制(可能更快一点)
-
-
-
十六进制(Hexadecimal)[ˌheksəˈdesɪml]
-
H转B
-
以小数点为界,分别向左、向右每一位写为四位二进制数。
例:42.24H = 0100 0010 . 00100100B
-
-
H转O
- 先转为二进制,然后二进制转八进制。
例:45H = 0100 0101B = 001 000 101B = 105Q
-
H转D
-
整数部分:按权展开法
例:(EB6)16 = E * 162 + B * 161 + 6 * 160 = 3766D
-
小数部分:按权展开法
例:(.D8)16 = D * 16-1 + 8 * 16-2 = 0.84375D
-
-