为什么数字要"变身"?
我们的语言(十进制): 我们用0,1,2,3,4,5,6,7,8,9这10个数字来计数。数到9,再加1,就变成10(逢十进一)。
计算机的语言(二进制):计算机的大脑很简单,只认识0和1。所有信息都要变成由0和1组成的长长的字符串。这就是计算机的"二进制"语言。
翻译官(十六进制、八进制): 二进制串太长了,写起来好累!所以我们找了两个"缩写翻译官"。
十六进制:用来缩写二进制,让代码更短更漂亮。
八进制:有时也会用来缩写二进制。
十进制
特点: 逢十进一。数字:0,1,2,3,4,5,6,7,8,9。
位权(数字的"座位权力"): 同一个数字,坐在不同的位子上,代表的大小不一样!
例子:365
5坐在个位,权力最小是 10^0(就是1),所以它代表 5 * 1 = 5
6坐在十位,权力是 10^1(就是10),所以它代表 6 * 10 = 60
3坐在百位,权力最大是 10^2(就是100),所以它代表 3 * 100 = 300
总数 = 300 + 60 + 5 = 365
口诀:按权展开,再相加!
二进制
特点: 逢二进一。数字:只有0和1。
核心口诀:按权展开,乘完再相加!
手把手教程:把 (1011)₂变成十进制数
小试牛刀:(11001)₂= (?)₁₀(跟着步骤做!)
核心口诀:除基取余,直到商为0,然后倒着写!
手把手教程:把 (13)₁₀变成二进制数
第一步:写数字,标位置(从右往左,从0开始数!)
数字: 1011
位置编号:第3位 第2位 第1位 第0位
第二步:算权重(每个位置的"实际价值")
权重的算法是:2的(位置编号)次方。
第0位权重:2⁰ = 1
第1位权重:2¹ = 2
第2位权重:2² = 4
第3位权重:2³ = 8
所以,每个数字的实际价值是:1(值) * 8(权) = 8; 0(值) * 4(权) = 0; 1(值) * 2(权) = 2; 1(值) * 1(权) = 1。
第三步:乘起来,再加起来
(1 × 8) + (0 × 4) + (1 × 2) + (1 × 1)
= 8 + 0 + 2 + 1
= 11
最终答案:(1011)₂ = (11)₁₀
小试牛刀:(11001)₂= (?)₁₀(跟着步骤做!)
标位置(从右往左,从0开始):
数字: 11001
位置: 4 3 2 1 0
算权重(2的位置编号次方):
位置4: 2⁴ = 16
位置3: 2³ = 8
位置2: 2² = 4
位置1: 2¹ = 2
位置0: 2⁰ = 1
乘加计算:
(1×16) + (1×8) + (0×4) + (0×2) + (1×1) = 16 + 8 + 0 + 0 + 1 = 25
答案:(11001)₂ = (25)₁₀
核心口诀:除基取余,直到商为0,然后倒着写!
手把手教程:把 (13)₁₀变成二进制数
小试牛刀:(25)₁₀变身成二进制 (请你跟我一起做!)
【考级核心技能2】十进制 → 二进制(除2取余,倒着写)
第一步:连续除以2,并仔细记录余数
13 ÷ 2 = 6 ... 余 1 (这个余数1是个位,最右边)
6 ÷ 2 = 3 ... 余 0
3 ÷ 2 = 1 ... 余 1
1 ÷ 2 = 0 ... 余 1 (这个余数1是最高位,最左边)
第二步:把余数从最后一次计算开始,倒着写出来
我们得到的余数顺序是(从下往上看):1 (最下面) 1 0 1 (最上面)
所以,从高到低写出来就是:1101
最终答案:(13)₁₀ = (1101)₂
验证: 用我们学的【技能1】算一下 (1101)₂是不是等于13? (1×8)+(1×4)+(0×2)+(1×1)=8+4+0+1=13,完全正确!
25 ÷ 2 = 12 ... 余 1
12 ÷ 2 = 6 ... 余 0
6 ÷ 2 = 3 ... 余 0
3 ÷ 2 = 1 ... 余 1
1 ÷ 2 = 0 ... 余 1
倒着写:11001
结论:(25)₁₀ = (11001)₂
十六进制
特点: 逢十六进一。数字:0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)。
特别提醒:十六进制有A-F,它们代表10-15!一定要记住!
手把手教程:把 (2B)₁₆变成十进制数
第一步:写数字,标位置(从右往左,从0开始数!)
数字: 2B(B就是11!)
位置编号:第1位 第0位
第二步:算权重(这次是16的(位置编号)次方)
第0位权重:16⁰ = 1
第1位权重:16¹ = 16
所以,每个数字的实际价值是:2(值) * 16(权) = 32; 11(值) * 1(权) = 11。
第三步:乘起来,再加起来
(2 × 16) + (11 × 1)
= 32 + 11
= 43
最终答案:(2B)₁₆ = (43)₁₀
小试牛刀:(FF)₁₆= (?)₁₀(跟着步骤做!)
标位置:
数字: FF(F就是15!)
位置: 1 0
算权重:
位置1: 16¹ = 16
位置0: 16⁰ = 1
乘加计算:
(15×16) + (15×1) = 240 + 15 = 255
答案:(FF)₁₆ = (255)₁₀
【考级核心技能4】十进制 → 十六进制(除16取余,倒着写)
100 ÷ 16 = 6 ... 余 4 (4 < 10,所以直接写4)
6 ÷ 16 = 0 ... 余 6
倒着写:64
答案:(100)₁₀ = (64)₁₆
八进制
特点: 逢八进一。数字:0,1,2,3,4,5,6,7。
手把手教程:把 (31)₈变成十进制数
第一步:写数字,标位置(从右往左,从0开始数!)
数字: 31
位置编号:第1位 第0位
第二步:算权重(这次是8的(位置编号)次方)
第0位权重:8⁰ = 1
第1位权重:8¹ = 8
所以,每个数字的实际价值是:3(值) * 8(权) = 24; 1(值) * 1(权) = 1。
第三步:乘起来,再加起来
(3 × 8) + (1 × 1)
= 24 + 1
= 25
最终答案:(31)₈ = (25)₁₀
小试牛刀:(45)₈= (?)₁₀(跟着步骤做!)
例子:(66)₁₀变身成八进制
标位置:
数字: 45
位置: 1 0
算权重:
位置1: 8¹ = 8
位置0: 8⁰ = 1
乘加计算:
(4×8) + (5×1) = 32 + 5 = 37
答案:(45)₈ = (37)₁₀
【考级核心技能6】十进制 → 八进制(除8取余,倒着写)
66 ÷ 8 = 8 ... 余 2
8 ÷ 8 = 1 ... 余 0
1 ÷ 8 = 0 ... 余 1
倒着写:102
答案:(66)₁₀ = (102)₈
闯关成功总结页:
两大法宝:
其它进制 → 十进制: 按权展开,乘了再加!
十进制 → 其它进制: 除基取余,倒着写!
表示方法:给数字加个"前缀
在Python代码里写数字时,为了让计算机知道我们写的是哪种进制,需要给数字加上一个特殊的前缀。
0b | 0b1011 | ||
0o | 0o31 | ||
123 | |||
0x | 0x2B 或 0x2b |
特别提醒:
0b中的 b是 binary(二进制)的缩写。
0o中的 o是 octal(八进制)的缩写。这是一个数字0后面跟一个英文字母o,不是两个零 00!
0x中的 x是 hexadecimal(十六进制)的缩写。
十六进制中的字母 A-F,在代码里不区分大小写,0x2B和 0x2b是完全一样的。
2. 转换函数:让Python帮你
Python提供了几个内置函数,可以轻松地在不同进制之间转换,这些函数返回的是一个字符串。
bin(整数) | bin(11) | '0b1011' | |
oct(整数) | oct(25) | '0o31' | |
hex(整数) | hex(43) | '0x2b' | |
int(字符串, 进制) | int('1011', 2) | 11 | |
int('0o31', 8) | 25 | ||
int('2B', 16) | 43 |
int()函数使用技巧:
第一个参数是字符串。
第二个参数是进制基数,告诉Python你输入的字符串是几进制的。
如果字符串有前缀(如 '0b1011'),第二个参数可以写 0,Python会自动根据前缀判断进制。
例如:int('0b1011', 0)和 int('0o31', 0)都能正确转换。
# -*- coding: utf-8 -*- """ Python进制转换综合演示 """ print("🌟 Python进制转换演示 🌟") print("=" * 30) # 案例1:我们手工计算过的 (1011)₂ = (11)₁₀ print("案例1:二进制与十进制") binary_num = 0b1011 # 在代码中直接写二进制数 print(f"二进制数 0b1011 的十进制值是:{binary_num}") print(f"用函数验证 bin(11) = {bin(11)}") print(f"用函数验证 int('1011', 2) = {int('1011', 2)}") print() # 案例2: (2B)₁₆ = (43)₁₀ print("案例2:十六进制与十进制") hex_num = 0x2B # 在代码中直接写十六进制数 print(f"十六进制数 0x2B 的十进制值是:{hex_num}") print(f"用函数验证 hex(43) = {hex(43)}") print(f"用函数验证 int('2B', 16) = {int('2B', 16)}") print() # 案例3: (31)₈ = (25)₁₀ print("案例3:八进制与十进制") octal_num = 0o31 # 在代码中直接写八进制数 print(f"八进制数 0o31 的十进制值是:{octal_num}") print(f"用函数验证 oct(25) = {oct(25)}") print(f"用函数验证 int('31', 8) = {int('31', 8)}") print() # 综合大挑战:验证 (2E)₁₆ = (56)₈ = (46)₁₀ = (101110)₂ print("综合大挑战:验证所有进制都相等") print(f"十六进制 0x2E = {0x2E}") print(f"八进制 0o56 = {0o56}") print(f"十进制 46 = {46}") print(f"二进制 0b101110 = {0b101110}") print("结论:所有值都是46,完全正确!")