资讯专栏INFORMATION COLUMN

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

89542767 / 180人阅读

  位运算就是直接对整数在内存中对应的二进制位进行操作,一般是将数字化为二进制数后进行操作。本文将利用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
  """
  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://www.ucloud.cn/yun/129029.html

相关文章

  • ❤️思维导图整理大厂面试高频数组10: 3种方法彻底解决中位数问题, 力扣4❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), 毕竟算法不是做了一遍就能完全记住的. 所以本文适合已经知道解题思路和方法, 想进一步加强理解和记忆的朋友, 并不适合第一次接触此题的朋友(可以根据题号先去力扣看看官方题解, 然后再看本文内容). 关...

    XanaHopper 评论0 收藏0
  • Numpy中通用函数和聚合

    摘要:概述在中存在着通用函数和聚合去对数据进行处理通过向量进行对数据数组的计算而这些向量主要依靠一些通用函数而聚合是对面对大量数据时获取描述性统计信息的方法。三角函数提供了大量好用的通用函数,其中对于数据科学家最有用的就是三角函数。 showImg(https://segmentfault.com/img/remote/1460000018925263); 概述 在Numpy中存在着通用函数...

    xorpay 评论0 收藏0
  • C语言 位运算详解 (使用二进制实例深入学习理解位运算符使用原理)

    摘要:位运算符是对其操作数按其二进制形式逐位进行运算。接下来我们逐一讲解位运算符的计算原理按位与用于清零取某些指定位保位的计算原理,,结果上面使用按位与的一段程序运行结果为我们用二进制来分析一下它的计算规则。 C语言中位运算符共有六种 目录 1.&(按位与) 2. |(按位或) 3.^(按位抑或)...

    1treeS 评论0 收藏0
  • 如何对前端图片主题色进行提取?这篇文章详细告诉你

    摘要:由此,我尝试着利用在前端进行图片主题色的提取。一主题色算法目前比较常用的主题色提取算法有最小差值法中位切分法八叉树算法聚类色彩建模法等。 本文由云+社区发表 图片主题色在图片所占比例较大的页面中,能够配合图片起到很好视觉效果,给人一种和谐、一致的感觉。同时也可用在图像分类,搜索识别等方面。通常主题色的提取都是在后端完成的,前端将需要处理的图片以链接或id的形式提供给后端,后端通过运行相...

    jkyin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<