十进制转换成二进制
中等5概述:学习手动“除2取余”法,并用Python的`bin()`函数快速转换。
十进制转二进制:从手工到Python
计算机里所有的数据最终都是用二进制的0和1来存储的,就像开关只有“开”和“关”一样。而我们平时用的数是十进制(0~9)。把十进制数转成二进制,能帮你理解计算机的“语言”。本文会教两种方法:一种是你用纸笔就能算的“除2取余法”,另一种是直接用Python的bin()函数,最后还会教你写一个自己的转换函数。
1. 手工转换:除2取余法
这个方法就像分糖果:每次把总数除以2,看看能分几份(商),还剩几颗(余数)。一直分到没有糖果为止,然后倒着记录余数。
步骤(以13为例):
- 13 ÷ 2 = 6 …… 余 1
- 6 ÷ 2 = 3 …… 余 0
- 3 ÷ 2 = 1 …… 余 1
- 1 ÷ 2 = 0 …… 余 1
把余数从下往上读:1、1、0、1 → 1101。
所以13的二进制是1101。
生活例子:
假如你有13个苹果,每次拿出能装2个的盒子,装满了就把剩下的苹果记下来(余数),继续装剩下的……最后盒子数是商,剩下的苹果是余数。把每次剩下的苹果记在一张纸上,从最后一张纸倒着念,就是二进制。
2. 用Python的bin()函数
Python自带的bin()函数可以直接把任何整数转成二进制字符串,不过它会自动加上0b前缀表示这是二进制数。
# 十进制转二进制
num = 13
binary_str = bin(num) # 结果是 '0b1101'
print(binary_str) # 输出 0b1101
# 如果不想显示0b,可以用字符串切片去掉前两位
print(binary_str[2:]) # 输出 1101
注意:bin()返回的是字符串,不是数字。你可以在字符串前面加int()重新转回十进制:int('0b1101', 2)。
3. 自己写一个转换函数
手工过程可以用循环模拟:每次取余数,把商继续除以2。
def decimal_to_binary(n):
# n:要转换的十进制整数
if n == 0:
return "0" # 特殊情况:0的二进制就是"0"
result = "" # 存放二进制字符串,初始为空
while n > 0:
# 每次取余数,加在最前面(因为后面的余数对应高位)
result = str(n % 2) + result
n = n // 2 # 整数除法,得到商
return result
print(decimal_to_binary(13)) # 输出 1101
print(decimal_to_binary(0)) # 输出 0
代码解读:
n % 2得到当前最低位的余数(0或1)。str(n % 2) + result把新得到的余数放到字符串的最左边,这样最终顺序就是手工的“从下往上”。n // 2去掉最后一位,继续处理更高的位。- 当
n变成0时,循环结束,返回完整的二进制字符串。
4. 新手容易犯的错误
- 忘记从下往上读:手工算出来的余数是从上往下记的,但二进制要从下往上写。很多同学会写成顺序的“1011”(错误),正确是“1101”。
- 忘记处理0:如果输入是0,循环根本不会执行,直接返回空字符串
""。所以一定要单独判断if n == 0: return "0"。 - 字符串拼接顺序写反:如果写成
result = result + str(n % 2),那就会变成“1101”反过来“1011”,因为新余数加在了右边,导致顺序颠倒。 - 混淆
//和/:/是浮点数除法,结果会带小数,导致无限循环。一定要用//(整数除法)。
5. 完整可运行示例
下面是一段完整的代码,包含三种方法:手工模拟、bin()函数、自定义函数。
# 完整示例:十进制转二进制
num = 13 # 要转换的数字
# 方法1:使用Python内置bin()
print("方法1(bin函数):", bin(num)) # 输出 0b1101
print("去掉0b:", bin(num)[2:]) # 输出 1101
# 方法2:自定义函数(除2取余)
def decimal_to_binary(n):
# n:要转换的整数
if n == 0:
return "0"
binary_str = "" # 存储二进制结果
while n > 0:
binary_str = str(n % 2) + binary_str # 余数加在最前面
n = n // 2 # 整数除法,去掉最低位
return binary_str
my_result = decimal_to_binary(num)
print("方法2(自定义函数):", my_result) # 输出 1101
# 验证:用int()转回十进制
print("验证转回十进制:", int(my_result, 2)) # 输出 13
运行结果:
方法1(bin函数): 0b1101
去掉0b: 1101
方法2(自定义函数): 1101
验证转回十进制: 13
6. 相关指引
掌握了十进制转二进制,接下来可以学习:
- 二进制转十进制:用“位权相加”法,或者Python的
int('1101', 2)。 - 八进制和十六进制:
oct()和hex()函数,类似bin(),只是换成除以8或16。 - 位运算:二进制在编程中常用于设置标志位、加密、图像处理等。
记住:二进制里只有0和1,就像开关只有关和开。掌握了十进制转二进制,你就能读懂计算机的基本语言了!
例题精讲
1单选题
十进制数13转换成二进制的结果是?
A1101
B1011
C1110
D1001
2判断题
使用除2取余法将十进制转换为二进制时,最先得到的余数是二进制数的最高位。
3填空题
以下代码通过手动除2取余法将十进制数转换为二进制字符串。请补全代码。
def dec_to_bin(n):
result = ""
while n > 0:
remainder = n % 2
result = ___ + result
n //= 2
return result if result else "0"4单选题
在Python中,bin()函数返回值的类型是?
Aint
Bstr
Clist
Dtuple
5填空题
以下代码将十进制数25转换为二进制字符串并去掉前缀'0b',请补全。
num = 25
binary_str = bin(num)[___]
print(binary_str) # 输出 11001