zoukankan      html  css  js  c++  java
  • Python刷题:常用二进制操作(位运算)

    1. 变量值互换

    题目描述:在不使用第三个变量的前提下使用二进制的方式互换两个整型变量的值。
    解题代码:

    >>> a = 1234
    >>> b = 5678
    >>> a = a ^ b
    >>> b = a ^ b
    >>> a = a ^ b
    >>> print(a, b)
    5678 1234
    

    总结:互换两个变量的值其实在Python中也可以很简单,比如a, b = b, a,但是,如果要使用二进制的方式来进行操作的话,可以利用“异或”操作的特性,从这个算法也可以得到“异或”操作这样一个特性:两个整型值“异或”可以得到一个中间值,这个中间值和原先的任何一个值再次进行“异或”操作就可以得到另一个变量的值。

    2. 最低位的1清零

    题目描述:对于一个整型值,在二进制表示中,将其最低位的1变为0,其他位置的值不变。
    解题代码:

    >>> x = 124
    >>> bin(x)
    '0b1111100'
    >>> bin(x&(x-1))
    '0b1111000'
    

    总结:这也是一个常用的二进制操作,使用公式x&(x-1)即可,&为二进制的“与”操作。

    3. 获取最低位的1

    题目描述:对于一个整型值,在二进制表示中,只保留最低位的1,其余位置的值全部变为0。
    解题代码:

    >>> x = 86
    >>> bin(x)
    '0b1010110'
    >>> bin(x&~(x-1))
    '0b10'
    

    总结:这也是一个常用的二进制操作,使用公式x&~(x-1)即可,$为二进制的“与”操作,~为二进制的“取反”操作。

    4. 交换指定位置的两个比特位

    题目描述:对于一个整型值,在二进制表示中,交换指定位置的两个比特位的值。
    解题代码:

    def swap_bit(x, i, j):
        # 如果第i位和第j位是相同的,则没必要交换
        if ((x >> i) & 1) != ((x >> j) & 1):
            x ^= ((1 << i) | (1 << j))
    
        return x
    
    
    x = 0b0101
    i = 0
    j = 1
    print(bin(swap_bit(x, i, j)))  # 输出:0b110
    

    总结:这也是一个常用的二进制操作,使用公式x ^= ((1<<i) | (1<<j))即可,^为二进制的“异或操作”。

    题目及解题算法来自:书籍《Python程序员面试宝典》。

  • 相关阅读:
    Mysql创建nextval函数
    宝塔配置tomcat的配置
    小程序获取授权信息
    pycharm 2017新建文件添加编码方式等
    Linux下利用expect,不用交互模式,直接登陆远程主机
    linux文件权限解析(摘)
    linux环境下根据文件的某一列进行去重
    oracle查询用户权限及角色(摘)
    插入排序-python实现
    css清除浮动方法
  • 原文地址:https://www.cnblogs.com/guyuyun/p/14125624.html
Copyright © 2011-2022 走看看