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() 函数就不适用了,此时需要借助自定义的转换函数或者使用第三方库来实现。
评论区