详解Python中位运算的简单实现
作者:玩转测试开发 时间:2021-09-07 14:36:38
简介
程序中的数在计算机内存中都是以二进制的形式存在的,位运算就是直接对整数在内存中对应的二进制位进行操作,一般是将数字化为二进制数后进行操作。
应用场景
在常规操作和位运算的操作中使用位运算,可以提升性能。但是会造成代码难以理解,建议合理利用。
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
来源:https://blog.csdn.net/hzblucky1314/article/details/125493985
标签:Python,位运算


猜你喜欢
Python实现url长短链接的转换
2022-07-21 14:05:58

pip install如何指定包的安装路径
2022-05-28 03:38:47

微型设计专用工具Dorado
2011-01-06 12:23:00

关于SSD目标检测模型的人脸口罩识别
2023-06-20 05:20:56

2009淘宝网动画节日LOGO第一季
2009-05-18 19:11:00
python操作docx写入内容,并控制文本的字体颜色
2023-11-25 03:14:33
Python基于百度AI实现抓取表情包
2022-05-01 00:01:35

Python流程控制语句的深入讲解
2023-12-01 00:06:31

centos系统升级python 2.7.3
2023-08-18 06:40:52
Pytorch中DataLoader的使用方法详解
2023-07-19 04:45:39

JSQL 批量图片切换的实现代码
2023-09-05 06:47:59
mysql 5.7.16 免安装版安装配置方法图文教程
2024-01-15 18:42:17

Python 实现图像特效中的油画效果
2021-04-10 18:29:49

Flask 让jsonify返回的json串支持中文显示的方法
2022-01-23 04:20:31

Centos7使用yum安装Mysql5.7.19的详细步骤
2024-01-24 13:01:56

Python的os包与os.path模块的用法详情
2023-06-04 05:52:48
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2022-11-29 08:22:38
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2023-04-01 15:20:05

python使用Tkinter显示网络图片的方法
2021-09-26 18:25:38
Python跨文件全局变量的使用技巧
2023-09-17 00:00:31