算法-位运算

位操作(Bit Manipulation)是程序设计中对位模式或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代编程语言中,情况并非如此,很多编程语言的解释器都会基本的运算进行了优化,因此我们在实际开发中可以不必做一些编译器已经帮我们做好的优化,而就写出代码本身所要表现的意思。

 

1、67. 二进制求和

https://leetcode-cn.com/problems/add-binary/

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

输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"


示例 2:
输入: a = "1010", b = "1011"
输出: "10101"

# 最简单就是先转为十进制相加,再转回二进制
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        x, y = int(a,2), int(b, 2)
        result = bin(x + y)
        return result[2:]

# 位运算实现加法
"""
位运算表示不进位加法:
    不进位加法其实就是一个异或操作

位运算表示进位加法:
    进位加法其实就是一个与操作的结果左移一位

将 异或 得到的 不进位的值 跟 与操作左移 的值 
    再次进行 异或计算,然后再计算进位
    判断进位是否为0
        不为0则继续重复上述步骤
        为0则结束
"""
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        x, y = int(a, 2), int(b, 2)
        while y:
            cur_res = x ^ y  # 不进位时的结果
            carry = (x & y) << 1  # 进位,若不为0,代表产生了进位
            x, y = cur_res, carry
        return bin(x)[2:]

 

posted @ 2021-11-17 21:55  我用python写Bug  阅读(58)  评论(0编辑  收藏  举报