四、进制
进制转换魔法咒语:权重
4.1 Python中的进制:简单易懂的解释
在Python中,进制是一种表示数字的方法,它包括我们常见的十进制、二进制、八进制和十六进制。
4.1.1 十进制(Decimal):
- 这是我们平时生活中最常用的进制,它由0到9这10个数字组成。
- 比如说,123表示1个100,2个10和3个1。
4.1.2 二进制(Binary):
- 二进制在电脑里非常重要,它只有两个数字:0和1。
- 类似于电灯开关,开就是1,关就是0。
- 二进制的每一位代表的是2的幂次,从右到左依次是2的0次方,2的1次方,2的2次方,以此类推。
- 举个例子,二进制的
1101
表示的是1个8(2的3次方),1个4(2的2次方),0个2(2的1次方)和1个1(2的0次方),合起来就是13。
4.1.3 八进制(Octal):
- 八进制使用0到7这8个数字。
- 每一位代表的是8的幂次。
- 例如,八进制的
127
表示的是1个64(8的2次方),2个8(8的1次方)和7个1(8的0次方),合起来就是87。
4.1.4 十六进制(Hexadecimal):
- 十六进制使用0到9这10个数字,以及A, B, C, D, E, F这6个字母,总共16个字符。
- 在十六进制中,A到F分别代表了10到15。
- 每一位代表的是16的幂次。
- 举个例子,十六进制的
1A
表示的是1个16和10个1,合起来就是26。
4.2 玩转数字魔法:Python中的进制转换大揭秘
常见的进制转换包括十进制
转换为二进制
、八进制
和十六进制
,以及这些进制转换为十进制。
4.2.1 十进制转二进制:
- 十进制转二进制是通过将十进制数除以2,并记录每次除法的余数来完成的。
每次除法的余数从下到上排列,就是对应的二进制数。
- 例子:将十进制的
13
转换为二进制。- 13 ÷ 2 = 6 余 1
- 6 ÷ 2 = 3 余 0
- 3 ÷ 2 = 1 余 1
- 1 ÷ 2 = 0 余 1
- 二进制数为
1101
。
4.2.2 十进制转八进制:
- 十进制转八进制是通过将十进制数除以8,并记录每次除法的余数来完成的。
每次除法的余数从下到上排列,就是对应的八进制数。
- 例子:将十进制的
123
转换为八进制。- 123 ÷ 8 = 15 余 3
- 15 ÷ 8 = 1 余 7
- 1 ÷ 8 = 0 余 1
- 八进制数为
173
。
4.2.3 十进制转十六进制:
- 十进制转十六进制是通过将十进制数除以16,并记录每次除法的余数来完成的。
每次除法的余数从下到上排列,就是对应的十六进制数
。如果余数大于9,则用字母A到F表示10到15。- 例子:将十进制的
255
转换为十六进制。- 255 ÷ 16 = 15 余 15(F)
- 15 ÷ 16 = 0 余 15(F)
- 十六进制数为
FF
。
4.2.4 二进制、八进制、十六进制转十进制:
- 二进制、八进制或十六进制转十进制是通过将每个数字乘以其所在位置的进制基数(2、8或16),然后求和来完成的。
- 例子:将二进制的
1101
转换为十进制。1*2^3
+1*2^2
+0*2^1
+1*2^0
= 8 + 4 + 0 + 1 = 13
- 例子:将八进制的
127
转换为十进制。1*8^2
+2*8^1
+7*8^0
= 64 + 16 + 7 = 87
- 例子:将十六进制的
1A
转换为十进制。1*16^1
+A*16^0
=1*16
+10*1
= 26
在Python中,我们可以使用内置函数
来进行这些转换:
# 十进制转二进制
print(bin(13)) # 输出 '0b1101'
# 十进制转八进制
print(oct(123)) # 输出 '0o173'
# 十进制转十六进制
print(hex(255)) # 输出 '0xff'
# 二进制、八进制、十六进制转十进制
print(int('1101', 2)) # 输出 13
print(int('127', 8)) # 输出 87
print(int('1a', 16)) # 输出 26
4.3 小数点后的秘密:二进制、八进制、十六进制与十进制小数的巧妙变身
小数部分的进制转换稍微有些不同,因为它涉及到除法后的乘法。下面我将解释如何将小数部分从十进制转换为二进制、八进制和十六进制。
4.3.1 十进制小数转二进制
- 乘以2取整法:
- 将小数部分乘以2。
记录乘法结果的整数部分
,这就是二进制小数点后的第一位
。- 取乘法结果的小数部分,重复步骤1,直到小数部分为0或达到所需的精度。
例子:将十进制的小数部分
0.625
转换为二进制。
0.625 × 2 = 1.25 → 整数部分为1 0.25 × 2 = 0.5 → 整数部分为0 0.5 × 2 = 1.0 → 整数部分为1,小数部分为0,停止
结果为二进制的
0.101
。
4.3.2 十进制小数转八进制
- 乘以8取整法:
- 将小数部分乘以8。
记录乘法结果的整数部分
,这就是八进制小数点后的第一位
。- 取乘法结果的小数部分,重复步骤1,直到小数部分为0或达到所需的精度。
例子:将十进制的小数部分
0.625
转换为八进制。
0.625 × 8 = 5.0 → 整数部分为5,小数部分为0,停止
结果为八进制的
0.5
。
4.3.3 十进制小数转十六进制
- 乘以16取整法:
- 将小数部分乘以16。
记录乘法结果的整数部分
,这就是十六进制小数点后的第一位
。如果整数部分大于9,用字母A到F表示10到15。- 取乘法结果的小数部分,重复步骤1,直到小数部分为0或达到所需的精度。
例子:将十进制的小数部分
0.625
转换为十六进制。
0.625 × 16 = 10.0 → 整数部分为A,小数部分为0,停止
结果为十六进制的
0.A
。
☆☆☆小数部分的进制转换也可以反过来进行
4.3.4 二进制小数转十进制
二进制小数转换为十进制的步骤如下:
- 每位乘以其权重:
- 从小数点后第一位开始,每一位数字乘以2的负幂次,从-1开始递减(即第一位乘以
2^-1
,第二位乘以2^-2
,以此类推)。 将所有乘积相加,得到十进制的小数部分
。 例子:将二进制的0.101
转换为十进制。
1 × 2^-1 + 0 × 2^-2 + 1 × 2^-3 = 0.5 + 0 + 0.125 = 0.625
结果为十进制的
0.625
。 - 从小数点后第一位开始,每一位数字乘以2的负幂次,从-1开始递减(即第一位乘以
4.3.5 八进制小数转十进制
八进制小数转换为十进制的步骤如下:
- 每位乘以其权重:
- 从小数点后第一位开始,每一位数字乘以8的负幂次,从-1开始递减(即第一位乘以
8^-1
,第二位乘以8^-2
,以此类推)。 将所有乘积相加,得到十进制的小数部分
。 例子:将八进制的0.5
转换为十进制。
5 × 8^-1 = 0.625
结果为十进制的
0.625
。 - 从小数点后第一位开始,每一位数字乘以8的负幂次,从-1开始递减(即第一位乘以
4.3.6 十六进制小数转十进制
十六进制小数转换为十进制的步骤如下:
- 每位乘以其权重:
- 从小数点后第一位开始,每一位数字(或字母)乘以16的负幂次,从-1开始递减(即第一位乘以
16^-1
,第二位乘以16^-2
,以此类推)。如果数字是A到F,则将其转换为10到15。 将所有乘积相加,得到十进制的小数部分
。 例子:将十六进制的0.A
转换为十进制。
A × 16^-1 = 10 × 0.0625 = 0.625
结果为十进制的
0.625
。 - 从小数点后第一位开始,每一位数字(或字母)乘以16的负幂次,从-1开始递减(即第一位乘以
在Python中,可以使用内置函数float()
将二进制、八进制或十六进制的小数部分转换为十进制的小数。例如:
# 二进制小数转十进制
print(float('0b101')) # 输出 5.0
# 八进制小数转十进制
print(float('0o12')) # 输出 10.0
# 十六进制小数转十进制
print(float('0x1A')) # 输出 26.0
请注意
: 这些例子展示了整数部分的转换,对于小数部分,您需要在字符串中包含小数点,例如'0b1.101'
。