什么是进制转换
进制转换是将数字从一种计数进位规则,转换成另一种规则的过程,核心是保持数字的实际数值不变,只改变表示形式。
关键要点
- 常见进制包括十进制(日常使用,满 10 进 1)、二进制(计算机使用,满 2 进 1)、八进制(满 8 进 1)、十六进制(满 16 进 1)。
- 转换的核心逻辑是 “数值等价”,比如十进制的 “5”,二进制表示为 “101”,两者本质是同一个数值。
- 就像同样的金额,可换成 “元、角、分”,也能换成 “美元、美分”,金额本身不变,只是计数单位和进位规则变了。
- 转换分为 “正向转换”(十进制转其他进制)和 “反向转换”(其他进制转十进制),各有固定计算方法。
进制转换方法:按位展开求和法、除基取余法
- 按位展开求和法是非十进制转十进制的方法
- 除基取余法是十进制转非十进制的方法
按位展开求和法(非十进制→十进制)
核心原理
任何进制的数,本质都是 “每一位数字 × 对应位的位权” 之和。位权的规律是:以目标进制的基数为底,位序(从右往左数,起始为 0)为指数的幂。比如二进制的基数是 2,右数第 1 位(最右边)位权是 \(2^0=1\),第 2 位是 \(2^1=2\),第 3 位是 \(2^2=4\),以此类推。
步骤
- 确定待转换数的每一位数字,以及对应位的 “权值”(\(权值 = 基数^{位序}\),位序从右往左,位序值从 0 开始)。
- 每一位数字与对应权值相乘,得到该位的十进制数值。
- 所有位的十进制数值相加,结果即为最终十进制数。
示例
- 二进制: \(1001_{(2)} = 1 \times 2^3 + 0 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 8 + 0 + 0 + 1 = 9_{(10)}\)
- 八进制: \(302_{(8)} = 3 \times 8^2 + 0 \times 8^1 + 2 \times 8^0 = 192 + 0 + 2 = 194_{(10)}\)
- 十六进制: \(EA7_{(16)} = 14 \times 16^2 + 10 \times 16^1 + 7 \times 16^0 = 3751_{(10)}\)
除基取余法(十进制→非十进制)
核心原理
十进制数可以拆成目标进制基数的若干次幂之和,通过 “除以基数取余数” 的方式,从最低位到最高位依次求出每一位的数字,最后反向排列余数即可。简单说:余数是 “低位”,商继续除是为了求 “高位”。
步骤
- 用十进制数除以目标进制的基数,得到商和余数。
- 用上一步的商继续除以基数,重复得到新的商和余数。
- 直到商为 0 时停止,将所有余数按 “后得先排” 的顺序排列,即为目标进制数。
示例
前 17 个十进制整数与二进制、八进制、十六进制的对应关系
十进制012345678910111213141516二进制0110111001011101111000100110101011110011011110111110000八进制01234567101112131415161720十六进制0123456789ABCDEF10二进制与八进制、十六进制的转换
- 二进制转八进制按 3 位分组、转十六进制按 4 位分组
- 反向转换则拆分补 0,不足位数在高位补 0 即可
二进制转八进制(2→8)
- 从二进制数的右端开始,每 3 位分为一组。
- 若最左端分组不足 3 位,在前面补 0 凑够 3 位。
- 每组对应一个八进制数字(0-7),组合结果即为八进制数。
二进制转十六进制(2→16)
- 从二进制数的右端开始,每 4 位分为一组。
- 若最左端分组不足 4 位,在前面补 0 凑够 4 位。
- 每组对应一个十六进制数字(0-9、A-F),组合结果即为十六进制数。
八进制 / 十六进制转二进制(8/16→2)
- 八进制转二进制:每一位八进制数,拆成 3 位二进制数(不足 3 位前补 0)。
- 十六进制转二进制:每一位十六进制数,拆成 4 位二进制数(不足 4 位前补 0)。
- 去掉组合后最左端多余的 0(若有),得到二进制数。
小数的进制转换
- 十进制→其他进制:整数部分 “除基取余,逆序排列”,小数部分 “乘基取整,顺序排列”,最后拼接。
- 其他进制→十进制:整数部分 + 小数部分均 “按权展开求和”,再合并结果。
十进制转其他进制
整数部分:除基取余,逆序排列
- 步骤:用十进制整数除以基数 R,记录余数;再用商继续除以 R,直到商为 0;最后将所有余数从后往前排列,就是 R 进制整数部分。
- 示例:十进制 10 转二进制(R=2)
- \(10 \div 2 = 5\),余数 0;
- \(5 \div 2 = 2\),余数 1;
- \(2 \div 2 = 1\),余数 0;
- \(1 \div 2 = 0\),余数 1;
- 逆序排列余数:1010,即 \(10_{(10)} = 1010_{(2)}\)。
小数部分:乘基取整,顺序排列
- 步骤:用十进制小数乘以基数 R,记录整数部分(0 或 1,R=2 时);再用剩余小数部分继续乘 R,直到小数部分为 0 或达到所需精度;最后将整数部分按顺序排列,就是 R 进制小数部分。
- 示例:十进制 0.25 转二进制(R=2)
- \(0.25 \times 2 = 0.5\),整数部分 0;
- \(0.5 \times 2 = 1.0\),整数部分 1;
- 小数部分为 0,停止;
- 顺序排列整数:01,即 \(0.25_{(10)} = 0.01_{(2)}\)。
其他进制转十进制
整数部分:权重为 \(R^0\)、\(R^1\)、\(R^2\)…(从右往左)
- 步骤:将 R 进制整数的每一位,乘以对应权重,再求和。
- 示例:二进制 1010 转十进制(R=2)
- 从右往左位值:第 1 位 0(权 \(2^0\))、第 2 位 1(权 \(2^1\))、第 3 位 0(权 \(2^2\))、第 4 位 1(权 \(2^3\));
- 计算:\(1\times 2^3 + 0\times 2^2 + 1\times 2^1 + 0\times 2^0 = 8+0+2+0 = 10\)。
小数部分:权重为 \(R^{-1}\)、\(R^{-2}\)、\(R^{-3}\)…(从左往右)
- 步骤:将 R 进制小数的每一位,乘以对应权重,再求和。
- 示例:二进制 0.01 转十进制(R=2)
- 从左往右位值:第 1 位 0(权 \(2^{-1}\))、第 2 位 1(权 \(2^{-2}\));
- 计算:\(0\times 2^{-1} + 1\times 2^{-2} = 0+0.25 = 0.25\)。
参考
- 1.1数值及其转换和数据的表示 - 哔哩哔哩
- 图解进制转换:二进制、八进制、十进制和十六进制转换 - C语言中文网
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|
|
|
|
|
相关推荐
|
|
|