【python】二进制与十进制的转换

​相关资料:十进制整数与二进制数的转换

一、十进制转换成二进制

1.1 bin函数实现

# 十进制数:
A_10 = 8

# 转换成二进制:
A_2 = bin(A_10)
## print(A_2)返回结果:0b1000

# 取数字部分:
bin(A_10)[2:]
  1. 返回结果中的“ob”是二进制的前缀,用来表示之后的数字是二进制。
  2. 返回类型为字符类型。

1.2 补充:栈函数实现

内容来自课程:数据结构与算法

十进制转换为二进制,采用的是“除以2求余数”的算法。将整数不断除以2,每次得到的余数就是由低到高的二进制位:
image-20220206020432846
( 35 ) 10 = ( 100011 ) 2 (35)_{10} = (100011)_2 (35)10=(100011)2
得到的余数是从低到高的次序,而输出则是从高到低,所以需要一个栈来反转次序。

1.2.1 定义栈

class Stack:
    def __init__(self):
        # 创建一个空栈,不包含任何数据项。
        self.items = []
    
    def isEmpty(self):
        # 返回栈是否为空栈。
        return self.items == []
    
    def push(self, item):
        # 将item加入栈顶。无返回值。
        self.items.append(item)
    
    def pop(self):
        # 将栈顶数据项移除,并返回该值。
        return self.items.pop()
    
    def peek(self):
        # 返回栈顶的数据项但不移除。
        return self.items[len(self.items)-1] # 或者 self.items[-1]
    
    def size(self):
        # 返回栈中有多少个数据项。
        return len(self.items)

1.2.2 转换实现

from pythonds.basic.stack import Stack

def divideBy2(decNumber):
    remstack = Stack()
    
    while decNumber > 0:
        rem = decNumber % 2 # 求余数
        remstack.push(rem)
        decNumber = decNumber // 2 # 整数除
        
    binStr = ""
    while not remstack.isEmpty():
        binStr = binStr + str(remstack.pop())
    
    return binStr

print(divideBy2(35))

二、二进制转换成十进制

image-20220206015546573

# 1. 字符串类型
A_2 = "101"
A_10 = int(A_2, 2)
# 2. 数值类型
A_2 = 0b101
A_10 = int(A_2)

注意:

  1. 当二进制数是字符串类型的时候,使用int函数时要加上参数2,否则会报错。
  2. 在写二进制数的时候,一定要加上0b这个前缀,否则会当成十进制数。
  3. 返回类型为int

三、相关题目

二进制求和
题解:

class Solution:
    def binaryAdd(self , A: str, B: str) -> str:
        # write code here
        c = int(A, 2) + int(B, 2)
        return bin(c)[2:]

贴一个在我知道int和bin函数之前写的题解:

class Solution:
    def binaryAdd(self , A: str, B: str) -> str:
        # write code here
        n, m = len(A), len(B)
        a, b = 0, 0
        for i in range(n):
            a += int(A[i]) * 2**(n-i-1)
        for j in range(m):
            b += int(B[j]) * 2**(m-j-1)
        c = a + b
        d = []
        while c > 0:
            d.append(str(c%2))
            c = c//2
        d.reverse()
        return "".join(d)
微信扫码订阅
UP更新不错过~
关注
  • 1
    点赞
  • 19
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

Kopparberg4%

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值