1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

详解Python中位运算的简单实现

位运算及其 Python 实现

我是本际云服务器推荐网的小编小本本,本文将介绍位运算及其在 Python 中的实现。位运算就是直接对整数在内存中对应的二进制位进行操作,一般是将数字化为二进制数后进行操作。程序中的数在计算机内存中都是以二进制的形式存在的。

详解Python中位运算的简单实现

应用场景

在常规操作和位运算的操作中使用位运算,可以提升性能。但是会造成代码难以理解,建议合理利用。常见的应用场景包括:

  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
print(bin(a1))
print(bin(b1))
print(a1&b1)#8
print(int("0b1000",2))
#|:两个位都为0时,结果才为0(统计偶数)即全0为0。
a2=10
b2=9
print(bin(a2))
print(bin(b2))
print(a2|b2)#11
print(int("0b1011",2))
#^:两个位相同为0,相异为1(常用统计不相同数)即不同为1。
a3=10
b3=9
print(bin(a3))
print(bin(b3))
print(a3^b3)#11
print(int("0b0011",2))
#~:0变1,1变0,相当于-x-1
a4=10
print(bin(a4))
print(~a4)#-11
print(int("-0b1011",2))
#求相反数
print(~a4+1)#-10
#<<:各二进位全部左移若干位,高位丢弃,低位补0,即:x<<n=x*(2**n)
a5=10
b5=a5<<3
print(bin(b5))
print(b5)#80
print(int("0b1010000",2))
#>>:各二进位全部右移若干位,对无符号数,高位补0,有符号数进行补符号位(算术右移),或者补0(逻辑右移)。
#即:x<<n=x/(2**n)
a6=64
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

以上是具体的 Python 代码实现及注释,可以供大家参考。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6654.html