一道算法(位处理)

67. 二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 10。

 

示例 1:

输入: a = "11", b = "1"
输出: "100"
示例 2:

输入: a = "1010", b = "1011"
输出: "10101"
class Solution:
    def addBinary(self, a, b) -> str:
        x, y = int(a, 2), int(b, 2)
        while y:
            answer = x ^ y
            carry = (x & y) << 1
            x, y = answer, carry
        return bin(x)[2:]

思考:

把 a 和 b 转换成整型数字 x和 y,在接下来的过程中,x保存结果,y保存进位。
当进位不为 00 时
计算当前 x 和 y 的无进位相加结果:answer = x ^ y
计算当前 x 和 y 的进位:carry = (x & y) << 1
完成本次循环,更新 x = answer,y = carry
返回 x 的二进制形式

使用int()函数将二进制字符串a与b转换为十进制数,再把a与b相加后使用bin函数转换为二进制数

注意a,b必须是字符串类型。否则报错: int() can't convert non-string with explicit base

^异位处理,

&同真为真,其他为假

取bin(x)[2:],是为了解决二进制的标志问题:

>>> bin(10)[:]
'0b1010'

运算符链接:

https://www.cnblogs.com/houxt/p/11250334.html

原文地址:https://www.cnblogs.com/topass123/p/13182601.html