找回密码
 立即注册
首页 业界区 安全 笔记:不同进制的转换方法

笔记:不同进制的转换方法

甘子萱 前天 22:45
什么是进制转换

进制转换是将数字从一种计数进位规则,转换成另一种规则的过程,核心是保持数字的实际数值不变,只改变表示形式。
关键要点


  • 常见进制包括十进制(日常使用,满 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语言中文网

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册