zoukankan      html  css  js  c++  java
  • 算法位运算

    位操作(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:]
  • 相关阅读:
    tcp的三次握手和四次挥手
    前端文档规范
    阻止事件冒泡
    研发纠纷解决方案
    ui-router 中views的配置
    JXL操作Excel部分详解(java)
    utf-8与utf-16的区别
    把字符串转换为Double 类型
    spring MVC
    Android项目目录结构
  • 原文地址:https://www.cnblogs.com/Zzbj/p/15569726.html
Copyright © 2011-2022 走看看