1、十进制是怎么转四进制的?
十进制转换四进制的步骤类似于 十进制转二进制,采用除 4 取余法。
🔢 转换方法
- 不断用 4 除当前数字,记录 余数。
- 把所有余数逆序排列,就是最终的四进制数。
📌 手算示例
示例 1:十进制 45
转四进制
45 ÷ 4 = 11 余 1
11 ÷ 4 = 2 余 3
2 ÷ 4 = 0 余 2 (商变 0,停止)
👉 结果 **231(四进制)**
示例 2:十进制 100
转四进制
100 ÷ 4 = 25 余 0
25 ÷ 4 = 6 余 1
6 ÷ 4 = 1 余 2
1 ÷ 4 = 0 余 1 (商变 0,停止)
👉 结果 **1210(四进制)**
🐍 Python 代码
方法 1:手写转换
def to_base4(n):
if n == 0:
return '0' # 0 的四进制就是 '0'
result = ''
while n > 0:
result = str(n % 4) + result # 取余数,并放在前面
n //= 4 # 整除,继续计算
return result
# 测试
print(to_base4(45)) # 输出 '231'
print(to_base4(100)) # 输出 '1210'
print(to_base4(7)) # 输出 '13'
Python 没有 内置的 format(n, 'q')
(四进制转换),但可以用 oct()
处理八进制、hex()
处理十六进制。
✅ 结论
- 手算方法:除 4 取余,倒序排列余数
- Python 代码:
- 迭代版:使用
while
计算余数 - 递归版:更简洁,但适合小数
- 迭代版:使用
- 不能用
format(n, 'o')
,因为o
代表八进制!
进制 | 正确写法 |
---|---|
二进制 | format(n, 'b') |
四进制 | to_base4(n) (需手写) |
八进制 | format(n, 'o') |
十六进制 | format(n, 'x') |
在 Python 里,大部分常见进制的数转换为十进制数时,都能够使用 int()
函数来实现,但需要满足一定的条件。下面为你详细介绍:
可以使用 int()
函数的情况
int()
函数的基本语法是 int(x, base=10)
,这里的 x
通常是字符串类型,base
表示 x
所代表数字的进制,取值范围是 2 到 36 之间的整数。这意味着当要转换的数是用 2 到 36 进制表示,并且以字符串形式呈现时,就可以使用 int()
函数转换为十进制数。
# 二进制转十进制
binary_num = "1010"
decimal_num1 = int(binary_num, base=2)
print(f"二进制数 {binary_num} 转换为十进制是: {decimal_num1}")
# 八进制转十进制
octal_num = "25"
decimal_num2 = int(octal_num, base=8)
print(f"八进制数 {octal_num} 转换为十进制是: {decimal_num2}")
# 十六进制转十进制
hexadecimal_num = "1F"
decimal_num3 = int(hexadecimal_num, base=16)
print(f"十六进制数 {hexadecimal_num} 转换为十进制是: {decimal_num3}")
代码解释
- 二进制转十进制:将二进制字符串
"1010"
按照 2 进制转换为十进制数。 - 八进制转十进制:把八进制字符串
"25"
按照 8 进制转换为十进制数。 - 十六进制转十进制:将十六进制字符串
"1F"
按照 16 进制转换为十进制数。
限制条件
base
的取值范围:base
必须是 2 到 36 之间的整数。这是因为在 36 进制及以内,能够使用 0 - 9 和 a - z(或 A - Z)来表示各个数位的值。超过 36 进制时,就没有足够的字符来表示每个数位了。- 输入必须是有效的字符串:输入的字符串必须是对应进制下的有效表示。例如,在二进制中只能包含
0
和1
,在八进制中只能包含0 - 7
等。若输入不符合要求,就会抛出ValueError
异常。
try:
# 无效的二进制数,包含非 0 和 1 的字符
invalid_binary = "1020"
result = int(invalid_binary, base=2)
except ValueError as e:
print(f"出现错误: {e}")
特殊情况
对于像 64 进制这种超出 int()
函数 base
取值范围的进制转换,int()
函数就不适用了,此时需要借助自定义的转换函数或者使用第三方库来实现。
评论区