• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python刷题:常用二进制操作

python 搞java代码 3年前 (2022-05-21) 21次浏览 已收录 0个评论

1. 变量值互换

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

<code class="language-python">>>> a = 1234
>>> b = 5678
>>> a = a ^ b
>>> b = a ^ b
>>> a = a ^ b
>>> print(a, b)
5678 1234
</code>

www#gaodaima.com来源gao@dai!ma.com搞$代^码网搞代码

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

2. 最低位的1清零

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

<code class="language-python">>>> x = 124
>>> bin(x)
"0b1111100"
>>> bin(x&(x-1))
"0b1111000"
</code>

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

3. 获取最低位的1

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

<code class="language-python">>>> x = 86
>>> bin(x)
"0b1010110"
>>> bin(x&~(x-1))
"0b10"
</code>

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

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

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

<code class="language-python">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
</code>

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

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python刷题:常用二进制操作

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址