当前位置:
首页 > temp > python入门教程 >
-
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))
即可,^
为二进制的“异或操作”。
出处:https://www.cnblogs.com/guyuyun/p/14125624.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数