Python刷题:常用二进制操作(位运算)

世上唯一不能复制的是时间,唯一不能重演的是人生,唯一不劳而获的是年龄。该怎么走,过什么样的生活,全凭自己的选择和努力。人生很贵,请别浪费!与智者为伍,与良善者同行。Python刷题:常用二进制操作(位运算),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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程序员面试宝典》。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/235404.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!