Python位运算应用场景有哪些,有几种类型
Admin 2022-08-08 群英技术资讯 294 次浏览
程序中的数在计算机内存中都是以二进制的形式存在的,位运算就是直接对整数在内存中对应的二进制位进行操作,一般是将数字化为二进制数后进行操作。
在常规操作和位运算的操作中使用位运算,可以提升性能。但是会造成代码难以理解,建议合理利用。
1、统计奇数
2、统计偶数
3、统计不相同数等
4、求相反数
位运算分有6种:
1、按位与:两个位都为1时,结果才为1(统计奇数)即全1为1。
2、按位或:两个位都为0时,结果才为0(统计偶数)即全0为0。
3、按位异或:两个位相同为0,相异为1(常用统计不相同数)即不同为1。
4、按位取反:0变1,1变0,相当于 -x-1
5、左移运算:各二进位全部左移若干位,高位丢弃,低位补0。
6、右移运算:各二进位全部右移若干位,对无符号数,高位补0,有符号数进行补符号位(算术右移),或者补0(逻辑右移)。
# -*- coding: utf-8 -*- # time: 2022/5/22 17:56 # file: bitwise.py # 公众号: 玩转测试开发 # &:两个位都为1时,结果才为1(统计奇数)即全1为1。 a1 = 10 b1 = 9 """ 10 = 0b1010 9 = 0b1001 8 = 0b1000 """ print(bin(a1)) print(bin(b1)) print(a1 & b1) # 8 print(int("0b1000", 2)) # |:两个位都为0时,结果才为0(统计偶数)即全0为0。 a2 = 10 b2 = 9 """ 10 = 0b1010 9 = 0b1001 11 = 0b1011 """ print(bin(a2)) print(bin(b2)) print(a2 | b2) # 11 print(int("0b1011", 2)) # ^:两个位相同为0,相异为1(常用统计不相同数)即不同为1。 a3 = 10 b3 = 9 """ 10 = 0b1010 9 = 0b1001 3 = 0b0011 """ print(bin(a3)) print(bin(b3)) print(a3 ^ b3) # 11 print(int("0b0011", 2)) # ~:0变1,1变0,相当于 -x-1 a4 = 10 """ 10 = 0b1010 -x-1 = -11 """ print(bin(a4)) print(~a4) # -11 print(int("-0b1011", 2)) # 求相反数 print(~a4 + 1) # -10 # <<:各二进位全部左移若干位,高位丢弃,低位补0,即:x << n = x * (2 ** n) a5 = 10 """ 10 = 0b1010 x = 10 * 2 ** 3 = 10 * 2 * 2 * 2 """ b5 = a5 << 3 print(bin(b5)) print(b5) # 80 print(int("0b1010000", 2)) # >>:各二进位全部右移若干位,对无符号数,高位补0,有符号数进行补符号位(算术右移),或者补0(逻辑右移)。 # 即:x << n = x / (2 ** n) a6 = 64 """ 64 = 0b1000000 x = 64 / (2 ** 3) = 64 / (2 * 2 * 2) """ b6 = a6 >> 3 print(bin(b6)) print(b6) # 8 # 经典案例:使用 ^ 找出出现一次的数 a7 = 1 ^ 1 ^ 2 a8 = 1 ^ 2 ^ 1 a9 = 2 ^ 1 ^ 1 print(a7) print(a8) print(a9) # 统计原始方法和位运算方法花费的时间 import time loop = 30000000 start1 = time.time() odd_list1 = [] for i in range(loop): if i & 1 == 1: odd_list1.append(i) end1 = time.time() print(f"time1:{end1 - start1}") start2 = time.time() odd_list2 = [] for i in range(loop): if i % 2 == 1: odd_list1.append(i) end2 = time.time() print(f"time2:{end2 - start2}") # time1:5.262001037597656 # time2:4.736037492752075
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了python numpy库,numpy是一个开源的python科学计算扩展库,主要用来处理任意维度数组和矩阵。相同的任务,使用numpy比直接用python的基本数据结构更加简单高效,下面一起进入文章了解更多详细内容吧
这篇文章主要介绍了Python 迭代器Iterator详情,迭代器可以帮助我们解决面对复杂的数据场景时,快速简便的获取数据,下文关于其详细介绍,需要的小伙伴可以参考一下
创建字典有非常多种方式,但是我认为只要先掌握以下3种,就可以应对大部分的应用场景了; 1.直接赋值法;2.关键字赋值法;3. 列表转化法;4 .元素增加法;5. 元组转化法;6. 创建key值法
这篇文章介绍了Python使用openpyxl模块处理Excel文件的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
这篇文章主要为大家介绍了如何利用PyQt5制作一个简单的截图翻译工具,具有截图功能、翻译功能和文字识别OCR,需要的可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008