目录
[例子1:二进制 1101 转十进制](#例子1:二进制 1101 转十进制)
[例子2:二进制 10110 转十进制](#例子2:二进制 10110 转十进制)
[1. 记住常用对应关系](#1. 记住常用对应关系)
[2. 快速判断大小](#2. 快速判断大小)
[3. 转换小窍门](#3. 转换小窍门)
[4. 负数怎么办?](#4. 负数怎么办?)
一、什么是进制?
简单理解:进制就是"逢几进一"的计数方式。就像平时我们数数:
-
数到9,下一个就是10(这是十进制,逢10进1)
-
二进制只有0和1,数到1,下一个就是10(逢2进1)
-
时钟是60进制(60秒=1分钟,60分钟=1小时)
常见进制:
-
十进制:0,1,2,3,4,5,6,7,8,9,10,11...
-
二进制:0,1,10,11,100,101,110,111...
-
八进制:0,1,2,3,4,5,6,7,10,11,12...
-
十六进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10...
二、不同进制之间的转换方法
方法1:十进制转其他进制(除基取余法)
核心思想:用十进制数不断除以目标进制的基数,记录余数,直到商为0,最后把余数倒过来写。
例子1:十进制13转二进制(基数是2)
cpp
步骤:
13 ÷ 2 = 6 ... 余1 ↑ (最后取)
6 ÷ 2 = 3 ... 余0 ↑
3 ÷ 2 = 1 ... 余1 ↑
1 ÷ 2 = 0 ... 余1 ↑ (最先取)
把余数从下往上读:1101
所以:13(十进制) = 1101(二进制)
例子2:十进制255转十六进制(基数是16)
cpp
步骤:
255 ÷ 16 = 15 ... 余15 ↑ (15在十六进制中是F)
15 ÷ 16 = 0 ... 余15 ↑ (15在十六进制中是F)
把余数从下往上读:FF
所以:255(十进制) = FF(十六进制)
简单记忆:除基数,取余数,倒着读。
方法2:其他进制转十进制(按权展开法)
核心思想:把每一位数字乘以基数的"位置次方",然后全部加起来。
位置次方规律:从右往左数,第0位(个位)是基数⁰,第1位是基数¹,第2位是基数²...
例子1:二进制1101转十进制
cpp
位置: 3 2 1 0 (从右往左数的位置)
数字: 1 1 0 1
计算:
1 × 2³ = 1 × 8 = 8
1 × 2² = 1 × 4 = 4
0 × 2¹ = 0 × 2 = 0
1 × 2⁰ = 1 × 1 = 1
总和:8 + 4 + 0 + 1 = 13
所以:1101(二进制) = 13(十进制)
例子2:十六进制2A转十进制
cpp
十六进制:2 A
对应数字:2 10 (A在十六进制中代表10)
计算:
2 × 16¹ = 2 × 16 = 32
10 × 16⁰ = 10 × 1 = 10
总和:32 + 10 = 42
所以:2A(十六进制) = 42(十进制)
简单记忆:每位乘基数^位置,然后全加起来。
方法3:二进制和八进制/十六进制的快速转换
为什么能快速转换?
-
1位八进制 = 3位二进制(因为2³=8)
-
1位十六进制 = 4位二进制(因为2⁴=16)
二进制转八进制(3位一组)
cpp
例子:二进制 101 110 011
步骤:
1. 从右往左,每3位分一组(不足3位左边补0)
101 110 011
2. 每组转换成对应的八进制
101(二进制) = 1×4 + 0×2 + 1×1 = 5(八进制)
110(二进制) = 1×4 + 1×2 + 0×1 = 6(八进制)
011(二进制) = 0×4 + 1×2 + 1×1 = 3(八进制)
3. 连起来:563
所以:101110011(二进制) = 563(八进制)
八进制转二进制(1位拆3位)
cpp
例子:八进制 563 转二进制
步骤:
5(八进制) = 101(二进制)
6(八进制) = 110(二进制)
3(八进制) = 011(二进制)
连起来:101110011
所以:563(八进制) = 101110011(二进制)
二进制转十六进制(4位一组)
cpp
例子:二进制 1101 1010 1111
步骤:
1. 从右往左,每4位分一组
1101 1010 1111
2. 每组转换成对应的十六进制
1101 = 1×8 + 1×4 + 0×2 + 1×1 = 13 = D
1010 = 1×8 + 0×4 + 1×2 + 0×1 = 10 = A
1111 = 1×8 + 1×4 + 1×2 + 1×1 = 15 = F
3. 连起来:DAF
所以:110110101111(二进制) = DAF(十六进制)
十六进制转二进制(1位拆4位)
cpp
例子:十六进制 2F8 转二进制
步骤:
2(十六进制) = 0010(二进制) ← 补0成4位
F(十六进制) = 15(十进制) = 1111(二进制)
8(十六进制) = 1000(二进制)
连起来:0010 1111 1000(去掉前面的0就是10 1111 1000)
所以:2F8(十六进制) = 1011111000(二进制)
进制转换心算法:超简单的口算技巧!
1.心算法的核心思想
一句话总结:从左到右,每次乘以基数,加上下一位数字。
数学原理:这是霍纳法则(Horner's Method)在进制转换中的应用,避免了计算幂次的麻烦。
2.具体操作方法
二进制 → 十进制(最常用)
规则:
-
从最左边的数字开始
-
第一步:这个数字就是初始值
-
第二步:初始值 × 2 + 下一位数字 = 新值
-
重复:新值 × 2 + 再下一位数字...
-
直到最后一位
例子1:二进制 1101 转十进制
cpp
一步一步来:
1. 从最左边开始:第一位是 1(这就是初始值)
2. 初始值1 × 2 + 下一位1 = 1×2+1 = 3
3. 新值3 × 2 + 下一位0 = 3×2+0 = 6
4. 新值6 × 2 + 下一位1 = 6×2+1 = 13
完成!结果是13
口算过程:
cpp
1 → (×2)→ 2 → (+1)→ 3
3 → (×2)→ 6 → (+0)→ 6
6 → (×2)→ 12 → (+1)→ 13
例子2:二进制 10110 转十进制
cpp
心算过程:
1. 第一位是1(初始值)
2. 1×2+0=2
3. 2×2+1=5
4. 5×2+1=11
5. 11×2+0=22
结果:22
推广到其他进制
这个方法适用于任何进制转十进制!只要把乘的"2"换成对应的基数就行。
八进制 → 十进制(基数8)
例子 :八进制 352 转十进制
cpp
心算:
1. 第一位是3(初始值)
2. 3×8+5=24+5=29
3. 29×8+2=232+2=234
结果:234
验证:3×8²+5×8¹+2×8⁰=3×64+5×8+2=192+40+2=234 ✓
例子 :十六进制 2A9 转十进制(A=10)
cpp
心算:
1. 第一位是2(初始值)
2. 2×16+10=32+10=42
3. 42×16+9=672+9=681
结果:681
三进制、五进制等任意进制
例子:三进制 201 转十进制(基数3)
cpp
心算:
1. 第一位是2(初始值)
2. 2×3+0=6+0=6
3. 6×3+1=18+1=19
结果:19
心算法的优势:
-
不用背幂次:不需要知道2³、2⁴是多少
-
不容易出错:每一步都很简单
-
适合口算:数字不大,容易心算
-
可中途停止:算到任何一位都知道当前结果
心算法的记忆口诀
cpp
从前往后走,
乘基加下位,
步步为营算,
轻松得结果。
分步记忆:
-
一:第一位是起点
-
乘:乘以基数(二进制乘2,八进制乘8...)
-
加:加上下一位数字
-
重:重复直到最后
-
核心要点:
-
通用公式 :
当前值 × 基数 + 下一位数字 -
适用所有进制:二进制乘2,八进制乘8,十六进制乘16...
-
从左到右:一次处理一位,不需要反向
-
从简单开始:先练3-4位的二进制数
-
逐步增加:尝试5-6位,然后8位
-
混合练习:练完二进制,练八进制、十六进制
-
实际应用:看到车牌号、房间号等,尝试转换成二进制
三、常用进制的特点与用途
十进制(我们最熟悉的)
-
特点:有10个数字(0-9),逢10进1
-
用途:日常生活计算
二进制(计算机的语言)
-
特点:只有0和1,逢2进1
-
用途:计算机内部所有数据都用二进制表示
-
为什么用二进制:电子设备最容易表示两种状态(开/关,高电压/低电压)
十六进制(程序员的速记法)
-
特点:有16个符号(0-9,A-F),逢16进1
-
用途:计算机编程中简写二进制(1位十六进制=4位二进制)
-
例子:
cpp
二进制:1111 1111 0000 1111(太长不好记)
十六进制:FF0F(简洁多了)
八进制(现在较少用)
-
特点:有8个数字(0-7),逢8进1
-
用途:Unix/Linux系统中的文件权限表示
四、实际转换练习
练习1:将十进制100转换成其他进制
cpp
1. 转二进制:
100 ÷ 2 = 50 ... 0
50 ÷ 2 = 25 ... 0
25 ÷ 2 = 12 ... 1
12 ÷ 2 = 6 ... 0
6 ÷ 2 = 3 ... 0
3 ÷ 2 = 1 ... 1
1 ÷ 2 = 0 ... 1
结果:1100100
2. 转十六进制:
100 ÷ 16 = 6 ... 4(余数4)
6 ÷ 16 = 0 ... 6(余数6)
结果:64
验证:6×16 + 4 = 96+4 = 100 ✓
练习2:将二进制101101转换成十进制和十六进制
cpp
1. 转十进制:
位置: 5 4 3 2 1 0
数字: 1 0 1 1 0 1
计算:
1×2⁵ + 0×2⁴ + 1×2³ + 1×2² + 0×2¹ + 1×2⁰
= 32 + 0 + 8 + 4 + 0 + 1
= 45
2. 转十六进制:
先分组:0010 1101(前面补0)
0010 = 2
1101 = 13 = D
结果:2D
验证:2D(十六进制) = 2×16 + 13 = 32+13 = 45 ✓
五、实用技巧和注意事项
1. 记住常用对应关系
cpp
二进制 十进制 十六进制
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F
2. 快速判断大小
-
二进制看起来数字大(比如1000),实际值小(十进制8)
-
十六进制看起来数字小(比如F),实际值大(十进制15)
3. 转换小窍门
- 十进制转二进制:也可以用"减权法",看这个数包含哪些2的幂次
cpp
比如:45 = 32 + 8 + 4 + 1
32是2⁵,8是2³,4是2²,1是2⁰
对应位置写1:101101
- 二进制转十进制:从右往左,每位依次代表1,2,4,8,16,32...遇到1就加上
4. 负数怎么办?
计算机中用"补码"表示负数,对初学者来说,先掌握正数的转换即可。
六、总结与记忆口诀
转换方法总结:
-
十转其他:除基数,取余数,倒着读
-
其他转十:每位乘(基数^位置),然后加起来
-
二/八/十六互转:利用"3位二进制=1位八进制","4位二进制=1位十六进制"
简单口诀:
-
看到十进制:想"除几取余"
-
看到二进制:想"1,2,4,8,16..."的加法
-
看到十六进制:想"4位一组"
-
不确定时:先转到十进制作为"中转站"
最终建议:
不要死记硬背!多练习几个例子,自然就掌握了。比如:
-
把你的年龄转换成二进制和十六进制
-
把你的生日(日)转换成二进制
-
把100以内的质数都转换一遍
掌握进制转换就像学一门外语,开始可能觉得陌生,但用多了就自然熟练了。这是理解计算机如何工作的第一步!