进制转换
梦想不会自己发光,真正闪耀的是那个为梦狂奔的你。献给知行的孩子们!(Eric.He著)
本教程将从进制的核心概念、常见进制(十进制、二进制、八进制、十六进制)的定义,到各类数制之间的转换方法,全面拆解进制转换的核心逻辑,帮助你掌握这一编程和计算机基础必备技能。
一、进制的核心概述
进制(Numeral System)即计数进位制,是人为定义的带进位的计数方法。不同进制的核心区别是基数(每一位能表示的数字个数)和进位规则(逢基数进1)。计算机领域最常用的进制包括十进制、二进制、八进制和十六进制。
1.1 十进制(Decimal)
- 基数:10(0-9 共10个数字)
- 进位规则:逢10进1
- 标识:通常后缀加
D(可省略),如 123D 或 123
- 位权:从右往左,第 n 位的位权为
10^(n-1)(如 123 = 1×10² + 2×10¹ + 3×10⁰)
- 应用场景:日常生活中最常用的计数方式,人类天然的计数习惯
1.2 二进制(Binary)
- 基数:2(0、1 两个数字)
- 进位规则:逢2进1
- 标识:后缀加
B,如 1010B
- 位权:从右往左,第 n 位的位权为
2^(n-1)(如 101B = 1×2² + 0×2¹ + 1×2⁰ = 5)
- 应用场景:计算机底层存储和运算的核心进制,所有数据最终都以二进制形式存储在内存/硬盘中
提示:二进制的每一位称为一个 比特(bit),8个比特组成一个 字节(Byte),是计算机存储的基本单位。
1.3 八进制(Octal)
- 基数:8(0-7 共8个数字)
- 进位规则:逢8进1
- 标识:后缀加
O 或前缀加 0(编程中),如 127O 或 0127
- 位权:从右往左,第 n 位的位权为
8^(n-1)(如 12O = 1×8¹ + 2×8⁰ = 10)
- 应用场景:早期计算机编程、文件权限配置(如 Linux 中的 chmod 755)
1.4 十六进制(Hexadecimal)
- 基数:16(0-9 + A-F 共16个字符,A=10、B=11、C=12、D=13、E=14、F=15)
- 进位规则:逢16进1
- 标识:后缀加
H 或前缀加 0x(编程中),如 1AH 或 0x1A
- 位权:从右往左,第 n 位的位权为
16^(n-1)(如 1AH = 1×16¹ + 10×16⁰ = 26)
- 应用场景:编程中简化二进制表示(1位十六进制=4位二进制)、内存地址表示、颜色值(如 #FF0000 表示红色)
| 十进制 |
二进制 |
八进制 |
十六进制 |
| 0 |
0 |
0 |
0 |
| 1 |
1 |
1 |
1 |
| 8 |
1000 |
10 |
8 |
| 10 |
1010 |
12 |
A |
| 16 |
10000 |
20 |
10 |
| 255 |
11111111 |
377 |
FF |
二、数制之间的转换
2.1 十进制与二进制的转换
2.1.1 十进制转换为二进制
核心方法:除2取余法(将十进制数反复除以2,直到商为0,余数倒序排列即为二进制数)
示例:将十进制数 13 转换为二进制
- 13 ÷ 2 = 6 余 1
- 6 ÷ 2 = 3 余 0
- 3 ÷ 2 = 1 余 1
- 1 ÷ 2 = 0 余 1
- 将余数倒序排列:1101 → 13(D) = 1101(B)
2.1.2 二进制转换为十进制
核心方法:按位权展开求和(每一位数字 × 对应位权,累加所有结果)
示例:将二进制数 1011 转换为十进制
- 位权分解:1×2³ + 0×2² + 1×2¹ + 1×2⁰
- 计算:8 + 0 + 2 + 1 = 11 → 1011(B) = 11(D)
2.2 八进制与二进制的转换
核心规律:1位八进制数 = 3位二进制数(因 8 = 2³),可直接按位映射转换
2.2.1 八进制转换为二进制
方法:将每一位八进制数转换为对应的3位二进制数,不足3位补前导0,拼接结果
示例:将八进制数 56(O) 转换为二进制
- 拆分八进制位:5 和 6
- 映射为3位二进制:5 → 101,6 → 110
- 拼接结果:101110 → 56(O) = 101110(B)
2.2.2 二进制转换为八进制
方法:从右往左将二进制数每3位分组,不足3位补前导0,每组转换为对应的八进制数
示例:将二进制数 1101011(B) 转换为八进制
- 分组(从右往左):001 101 011(补前导0使第一组为3位)
- 每组转换为八进制:001→1,101→5,011→3
- 拼接结果:153 → 1101011(B) = 153(O)
2.3 十六进制与二进制的转换
核心规律:1位十六进制数 = 4位二进制数(因 16 = 2⁴),可直接按位映射转换
2.3.1 十六进制转换为二进制
方法:将每一位十六进制数转换为对应的4位二进制数,不足4位补前导0,拼接结果
示例:将十六进制数 1A8(H) 转换为二进制
- 拆分十六进制位:1、A、8
- 映射为4位二进制:1→0001,A(10)→1010,8→1000
- 拼接结果:000110101000 → 1A8(H) = 110101000(B)(可省略前导0)
2.3.2 二进制转换为十六进制
方法:从右往左将二进制数每4位分组,不足4位补前导0,每组转换为对应的十六进制数
示例:将二进制数 1101101011(B) 转换为十六进制
- 分组(从右往左):0011 0110 1011(补前导0使第一组为4位)
- 每组转换为十六进制:0011→3,0110→6,1011→B
- 拼接结果:36B → 1101101011(B) = 36B(H)
2.4 八进制转换为十进制
核心方法:按位权展开求和(每一位数字 × 8的对应次方,累加所有结果)
示例:将八进制数 127(O) 转换为十进制
- 位权分解:1×8² + 2×8¹ + 7×8⁰
- 计算:64 + 16 + 7 = 87 → 127(O) = 87(D)
2.5 十六进制转换为十进制
核心方法:按位权展开求和(每一位字符 × 16的对应次方,累加所有结果;A-F需先转换为10-15)
示例1:将十六进制数 3F(H) 转换为十进制
- 位权分解:3×16¹ + F(15)×16⁰
- 计算:48 + 15 = 63 → 3F(H) = 63(D)
示例2:将十六进制数 100(H) 转换为十进制
- 位权分解:1×16² + 0×16¹ + 0×16⁰
- 计算:256 + 0 + 0 = 256 → 100(H) = 256(D)
三、注意事项
- 进制标识规范:编程中需严格遵循进制标识规则(如二进制无标识易被误判为十进制,十六进制前缀0x是C/C++/Python等语言的标准写法);
- 分组方向:二进制转八进制/十六进制时,务必从右往左分组,而非从左往右;
- 前导0处理:转换结果中的前导0可省略(如二进制00110可简写为110),不影响数值大小;
- 字符大小写:十六进制的A-F大小写均可(如0x1a与0x1A等价),编程中建议统一风格;
- 验证转换结果:转换后可反向验证(如十进制转二进制后,再转回十进制),确保结果正确;
- 小数进制转换:本教程聚焦整数转换,小数进制转换需用“乘基取整法”(如十进制小数转二进制:0.625×2=1.25取1,0.25×2=0.5取0,0.5×2=1.0取1 → 0.101B)。
四、总结
- 进制的核心是“基数”和“位权”:十进制基数10、二进制基数2、八进制基数8、十六进制基数16;
- 十进制转其他进制用“除基取余法”,其他进制转十进制用“按位权展开求和法”;
- 二进制与八进制/十六进制可直接按位映射(3位二进制=1位八进制,4位二进制=1位十六进制),是编程中简化二进制表示的核心技巧;
- 进制转换是计算机编程的基础,尤其在底层开发、嵌入式编程、数据存储等场景中高频使用;
- 掌握进制转换的核心逻辑后,可通过编程实现自动化转换(如C++编写进制转换函数),提升效率。
本教程从进制的核心概念到具体转换方法,全面拆解了进制转换的逻辑。掌握进制转换,是理解计算机数据存储和运算的关键,也是编程进阶的重要基础。
返回顶部