计算机进制与转换

一、常见的进制

进制 基数 数字符号 前缀/后缀
二进制 2 0, 1 0b(如 0b1010)
八进制 8 0~7 0o 或 0(如 0o17)
十进制 10 0~9 无
十六进制 16 0~9, A~F 0x(如 0x1F)

二、各进制转十进制

方法:按权展开求和

对于任意 R 进制数,第 i 位的权是 R的 i 次方(整数部分从右往左,i 从 0 开始)

例 1:二进制 1011 → 十进制

1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8+0+2+1 = 11(二进制对应底数是 2)

例 2:十六进制 2F → 十进制

2×16¹ + 15×16⁰ = 32+15 = 47(十六进制对应底数是 16)

例 3:带小数 101.11(二进制)→ 十进制

1×2² + 0×2¹ + 1×2⁰ + 1×2⁻¹ + 1×2⁻² = 4+0+1+0.5+0.25 = 5.75

例 4:八进制 257 → 十进制

2×8² + 5×8¹ + 7×8⁰ = 128 + 40 + 7 = 175(八进制对应底数是 8)

例 5:带小数的八进制 257.25 → 十进制

整数部分:2×8² + 5×8¹ + 7×8⁰ = 128+40+7 = 175

小数部分:2×8⁻¹ + 5×8⁻² = 2×0.125 + 5×0.015625 = 0.25 + 0.078125 = 0.328125

合并结果:257.25₍₈₎ = 175.328125₍₁₀₎

例 6:十进制 257 → 十进制 (说明"十进制本身就是按权展开的结果")

2×10² + 5×10¹ + 7×10⁰ = 200 + 50 + 7 = 257

其他根据 R 进制对应底数是 R,以此类推。

三、十进制转其他进制

1. 整数部分:除R取余,逆序排列

例1:十进制 45 → 二进制

45 ÷ 2 = 22 ... 余 1

22 ÷ 2 = 11 ... 余 0

11 ÷ 2 = 5 ... 余 1

5 ÷ 2 = 2 ... 余 1

2 ÷ 2 = 1 ... 余 0

1 ÷ 2 = 0 ... 余 1

从下往上读余数:101101

例 2:十进制 45 → 八进制

45 ÷ 8 = 5 ... 余 5
5 ÷ 8 = 0 ... 余 5

从下往上读余数:55

验证:5×8¹ + 5×8⁰ = 40 + 5 = 45

例 3:十进制 45 → 十六进制

45 ÷ 16 = 2 ... 余 13(即 D)
2 ÷ 16 = 0 ... 余 2

从下往上读余数:2D

验证:2×16¹ + 13×16⁰ = 32 + 13 = 45

例 4:十进制 200 → 八进制

2. 小数部分:乘R取整,顺序排列

例:十进制 0.625 → 二进制

0.625 × 2 = 1.25 → 取整 1

0.25 × 2 = 0.5 → 取整 0

0.5 × 2 = 1.0 → 取整 1

小数部分变为 0,转换结束。

从上往下读整数:0.101 ( 小数转出来的 101 本身也是一个二进制数,如果不加小数点,它会被理解成整数101(十进制 5),而不是 0.101(十进制 0.625)。)

例 2:十进制 0.625 → 八进制

0.625 × 8 = 5.0 → 取整 5

小数部分变为 0,转换结束。

从上往下读整数:0.5

验证:5×8⁻¹ = 5×0.125 = 0.625

例 3:十进制 0.625 → 十六进制

0.625 × 16 = 10.0 → 取整 10(即 A)

小数部分变为 0,转换结束。

从上往下读整数:0.A

验证:10×16⁻¹ = 10×0.0625 = 0.625

例 4:十进制 0.1 → 八进制(用于展示除不尽、无限循环的情况)

0.1 × 8 = 0.8 → 取整 0

0.8 × 8 = 6.4 → 取整 6

0.4 × 8 = 3.2 → 取整 3

0.2 × 8 = 1.6 → 取整 1

0.6 × 8 = 4.8 → 取整 4

0.8 × 8 = 6.4 → 取整 6 ← 开始循环

...

结果:0.063146...(无限循环,无法精确表示)

3. 整数部分和小数部分要拼回去,小数点不能丢

示例1:十进制数 45.625 转二进制

45.625

├── 整数部分 45 → 除2取余逆读 → 101101

└── 小数部分 0.625 → 乘2取整顺读 → 101

最后拼起来:

45.625₍₁₀₎ = 101101.101₍₂₎

注:这里的(10) 和 (2 ) 对应 十进制 和 二进制

示例2:十进制数 45.625 转八进制

45.625
├── 整数部分 45 → 除8取余逆读 → 55
└── 小数部分 0.625 → 乘8取整顺读 → 5

最后拼起来:

45.625₍₁₀₎ = 55.5₍₈₎

验证:5×8¹ + 5×8⁰ + 5×8⁻¹ = 40 + 5 + 0.625 = 45.625

示例3:十进制数 45.625 转十六进制

45.625
├── 整数部分 45 → 除16取余逆读 → 2D
└── 小数部分 0.625 → 乘16取整顺读 → A

最后拼起来:

45.625₍₁₀₎ = 2D.A₍₁₆₎

验证:2×16¹ + 13×16⁰ + 10×16⁻¹ = 32 + 13 + 0.625 = 45.625


整数部分

... 2² 2¹ 2⁰

↑ ↑ ↑

高位 低位

越往左,权越大。所以除基取余时,先得到的余数是低位,要逆序读才能得到正确结果。
小数部分

2⁻¹ 2⁻² 2⁻³ ...

↑ ↑ ↑

高位 低位

越往左,权越大 ;越往右,权越小。所以第一个乘出来的整数,对应的是 2⁻¹ 位,也就是小数点后第一位。

0.101₍₂₎ = 1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 0.5 + 0 + 0.125 = 0.625

四、二进制与八进制、十六进制的快速转换

这是最常用的技巧,因为 8=2³,16=2⁴。

二进制 ↔ 八进制(3 位一组)

例:二进制 10110101 → 八进制

从右往左每 3 位分组,不足补 0:

010 110 101

2 6 5

结果:265

二进制 ↔ 十六进制(4 位一组)

例:二进制 10110101 → 十六进制

从右往左每 4 位分组:

1011 0101

B 5

结果:B5

反向转换

例 1:八进制 72 → 二进制

7 → 111
2 → 010

结果:111010(去掉前导 0 为 111010)

验证:7×8¹ + 2×8⁰ = 56 + 2 = 58

111010₍₂₎ = 32+16+8+0+2+0 = 58

例 3:十六进制 3A → 二进制

3 → 0011

A → 1010

结果:00111010(去掉前导 0 为 111010)

验证:3×16¹ + 10×16⁰ = 48 + 10 = 58

111010₍₂₎ = 32+16+8+0+2+0 = 58

五、常用对照表

十进制 二进制 八进制 十六进制
0 0000 0 0
1 0001 1 1
2 0010 2 2
3 0011 3 3
4 0100 4 4
5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

六、总规律

任何进制转十进制,本质都是一句话:

每一位数字 × 这一位的权重,然后全部加起来。

权重怎么来?

  • 整数部分:从右往左,第 0 位、第 1 位、第 2 位......

  • 小数部分:从左往右,第 -1 位、第 -2 位、第 -3 位......

对于 R 进制:

第 i 位的权重 = Rⁱ

所以:

十进制值=∑(该位数字 × Rⁱ)

一、二进制

二进制基数 R = 2。

权重:

位置 权重
整数第0位 2⁰ = 1
整数第1位 2¹ = 2
整数第2位 2² = 4
整数第3位 2³ = 8
小数第1位 2⁻¹ = 0.5
小数第2位 2⁻² = 0.25

1. 只有整数部分

例:二进制 101

从右往左写权重:

二进制: 1 0 1

位置: 2 1 0

权重: 4 2 1

计算:

1×4+0×2+1×1=4+0+1=5

所以:

101₍₂₎ = 5₍₁₀₎

原始过程:

最右边是第0位,权重 2⁰ = 1

中间是第1位,权重 2¹ = 2

最左边是第2位,权重 2² = 4

是 1 就加对应权重,是 0 就不加

2. 只有小数部分

例:二进制 0.101

从小数点后第一位开始:

二进制: 0 . 1 0 1

位置: -1 -2 -3

权重: 0.5 0.25 0.125

计算:

1×0.5+0×0.25+1×0.125=0.5+0+0.125=0.625

所以:

0.101₍₂₎ = 0.625₍₁₀₎

原始过程:

小数点后第1位,权重 2⁻¹ = 0.5

小数点后第2位,权重 2⁻² = 0.25

小数点后第3位,权重 2⁻³ = 0.125

仍然是:数字 × 权重,然后相加

3. 整数部分 + 小数部分

例:二进制 101.101

拆成两半:

整数部分:

101₍₂₎ = 4 + 0 + 1 = 5

小数部分:

0.101₍₂₎ = 0.5 + 0 + 0.125 = 0.625

合起来:

101.101₍₂₎ = 5.625₍₁₀₎

原始过程:

二进制: 1 0 1 . 1 0 1

位置: 2 1 0 -1 -2 -3

权重: 4 2 1 0.5 0.25 0.125

计算:

1×4+0×2+1×1+1×0.5+0×0.25+1×0.125=4+0+1+0.5+0+0.125=5.625

二、八进制

八进制基数 R = 8。

权重:

位置 权重
整数第0位 8⁰ = 1
整数第1位 8¹ = 8
整数第2位 8² = 64
整数第3位 8³ = 512
小数第1位 8⁻¹ = 0.125
小数第2位 8⁻² = 0.015625
例:八进制 2571. 只有整数部分

从右往左:

八进制: 2 5 7

位置: 2 1 0

权重: 64 8 1

计算:

2×64+5×8+7×1=128+40+7=175

所以:

257₍₈₎ = 175₍₁₀₎

2. 只有小数部分

例:八进制 0.25

八进制: 0 . 2 5
位置: -1 -2
权重: 0.125 0.015625

计算:

2×0.125+5×0.015625=0.25+0.078125=0.328125

所以:

0.25₍₈₎ = 0.328125₍₁₀₎

3. 整数部分 + 小数部分

例:八进制 257.25

整数部分:

257₍₈₎ = 175₍₁₀₎

小数部分:

0.25₍₈₎ = 0.328125₍₁₀₎

合起来:

257.25₍₈₎ = 175.328125₍₁₀₎

三、十进制

十进制基数 R = 10。

其实我们平时写的十进制数,本身就是按权展开的结果。

权重:

位置 权重
整数第0位 10⁰ = 1
整数第1位 10¹ = 10
整数第2位 10² = 100
小数第1位 10⁻¹ = 0.1
小数第2位 10⁻² = 0.01
例:十进制 2571. 只有整数部分

十进制: 2 5 7
权重: 100 10 1

计算:

2×100+5×10+7×1=200+50+7=257

2. 只有小数部分

例:十进制 0.25

十进制: 0 . 2 5
权重: 0.1 0.01

计算:

2×0.1+5×0.01=0.2+0.05=0.25

四、十六进制

十六进制基数 R = 16。

数字:0 1 2 3 4 5 6 7 8 9 A B C D E F

其中:

A = 10

B = 11

C = 12

D = 13

E = 14

F = 15

权重:

位置 权重
整数第0位 16⁰ = 1
整数第1位 16¹ = 16
整数第2位 16² = 256
整数第3位 16³ = 4096
小数第1位 16⁻¹ = 0.0625
小数第2位 16⁻² = 0.00390625
例:十六进制 2F1. 只有整数部分

先转换字母:

F = 15

从右往左:

十六进制: 2 F

位置: 1 0

权重: 16 1

数字: 2 15

计算:

2×16+15×1=32+15=47

所以:

2F₍₁₆₎ = 47₍₁₀₎

2. 只有小数部分

例:十六进制 0.8

十六进制: 0 . 8
位置: -1
权重: 0.0625
数字: 8

计算:

8×0.0625=0.5

所以:

0.8₍₁₆₎ = 0.5₍₁₀₎

3. 整数部分 + 小数部分

例:十六进制 2F.8

整数部分:

2F₍₁₆₎ = 47₍₁₀₎

小数部分:

0.8₍₁₆₎ = 0.5₍₁₀₎

合起来:

2F.8₍₁₆₎ = 47.5₍₁₀₎

相关推荐
梦想不只是梦与想5 个月前
python 中的进制
python·进制转换
zfj3218 个月前
小数和整数10进制转2进制算法
算法·二进制·进制转换·十进制
故事不长丨9 个月前
C#进制转换:从基础原理到实战应用
开发语言·c#·进制转换·16进制·2进制·10进制
laufing1 年前
OD 算法题 B卷【正整数到Excel编号之间的转换】
进制转换
梁辰兴1 年前
数据结构实验3.1:顺序栈的基本操作与进制转换
数据结构·进制转换·顺序栈
卫青~护驾!2 年前
C++数组综合训练:插入删除/进制转换/排序算法
数据结构·c++·算法·进制转换
Aresy5962 年前
攻防世界Hello, CTF
笔记·学习·逆向·进制转换
Never_Satisfied2 年前
非对称任意进制转换器(安卓)
安卓·进制转换
IZGRI2 年前
进制转换详解
数据结构·c++·算法·进制转换