进制转换专题
1.进制基本概念
-
基数:进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。如十进制的基数为 10,含 0 ~ 9 十个数字
-
位权:进位制中每一固定位置对应的单位值。如十进制的个位位权为 10^0(1) 、十位位权为 10^1(10)、 百位位权为 10^2(100),以此类推
2.进制分类
-
十进制:生活中最常用的进制,满十进一,包含数字 0 ~ 9。任意的十进制数拆开都是由这十个基数构成
-
八进制:C语言中以 0 开头,满八进一,包含数字 0 ~ 7。任意的八进制数拆开都是由这八个基数构成
-
十六进制:C语言中以 0x 或 0X 开头,包含数字 0 ~ 9、 字母 A ~ F 或 a ~ f; A/a 代表数字 10,F/f 代表数字15。任意的十六进制数拆分开都是由这十六个基数构成
- 用字母代替 10 ~ 15 可避免歧义,如 0X931087中的10,如果不引入字母的话,不确定是看作十还是一和零
3.二/八/十六进制转十进制
- 拆分十进制数:从十进制数的拆分出发,对比得到其他进制转为十进制的方法。
# 每一位的数与该位位权相乘后相加求和
2354 = 2 * 10^3 + 3 * 10^2 + 5 * 10^1 + 4 * 10^0 = 2354
- 拆分二进制
# 二进制数只有0和1两种数字组成
# 二进制数每一位的位权为2^n
(1100)2 = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 = 12
- 转换方法
-
对于形式化的进制表示可以从 0 开始,对数字的各个数位进行编号,即个位起往左依次为编号 0,1,2,……;对称的,从小数点后的数位则是 -1,-2,……
-
十进制数 110,其中百位上的1表示 1 个 10^2, 即 100,十位的 1 表示 1 个 10^1, 即 10,个位的 0 表示 0 个10^0,即 0
-
二进制数 110,其中高位的 1 表示 1 个 2^2, 即 4,低位的 1 表示 1 个 2^1, 即 2,最低位的 0 表示 0 个2^0,即 0
-
十六进制数 110,其中高位的 1 表示 1 个 16^2, 即 256,低位的 1 表示 1 个 16^1, 即 16,最低位的 0 表示 0 个 16^0,即 0
-
- 总结
-
在数制中,各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关,这种关系称为数的位权
-
十进制数的位权是以 10 为底的幂,二进制数的位权是以 2 为底的幂,十六进制数的位权是以 16 为底的幂。数位由高向低,以降幂的方式排列
-
无论是二进制、八进制还是十六进制,各位上的位权与该位上的数相乘,最后再相加得到的和就是它转为十进制的结果
-
4.十进制转为二/八/十六进制
-
方法1(基础方法):短除法,除到商为0截止;余数要倒序相连
- 注意:十进制转为多少进制,除数就是多少(除二取余 除八取余 除十六取余)
- 案例
![]()
![]()
-
方法2(进阶方法)
-
原理:二进制转十进制是由若干个 2 的整数次幂相加得到的,那反过来,十进制转为二进制可以拆分为若干个2的整数次幂的和
-
必备:2 的 0 到 10 的幂次方
-
案例
// 计算十进制数345的二进制数 // 离345最近的是256 345 - 256 = 89 // 离89最近的64 89 - 64 = 25 // 离25最近的16 25 - 16 = 9 // 离9最近的8 9 - 8 = 1 // 所以345 = 256 + 64 + 16 + 8 + 1 // 1、2、4、8、16、32、64、128、256、512 、1024中用到的写1,未用到的写0 // 即1(1)、 2(0)、4(0)、8(1)、16(1)、32(0)、64(1)、128(0)、 256(1)、 512(0) 、1024(0) // 然后从后往前把括号里的数据读出来:0010 1011 001 省去无用的0,即101011001 // ====================或者========================= // 345 = 256 + 64 + 16 + 8 + 1 = 2^8 + 2^6 + 2^4 + 2^3 + 2^0 // = 1 * 2^8 + 0 * 2^7 + 1 * 2^6 + 0 * 2^5 + 1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 // 上式中与2的整数次幂相乘的1或0就是代表整数次幂的位权上的1或0,将2^8到2^0左边的0或1从左往右 // 排列依然是 101011001 -



浙公网安备 33010602011771号