Python 基础教程:位运算的奥妙

枫铃3年前 (2021-09-30)Python232

位运算是直接对内存中的二进制位进行操作,因此,它的运算效率相比一般的数学运算是比较高的。一般情况下,位运算主要分为六种:与运算、或运算、异或运算、取反运算、左移运算、右移运算。

在开始之前,先介绍一下将十进制转换成二进制的方法。为节约篇幅说明后面的内容,此处我们直接使用 python 内置的 bin() 函数将整数转换为二进制。

注意:若操作系统为32位,则二进制根据位数补全32位即可,以下用低位说明问题,如 10 的二进制计算出为 1010,则补全32位应为 00000000000000000000000000001010。

def toBin(num):
   # 十进制转换成二进制
   res = bin(int(num))
   # 去掉前两位,因为内置函数转换后前面两个字符是0b
   return res[2:]

if __name__ == '__main__':
   print toBin(10)

1、与运算

def toBin(num):
   # 十进制转换成二进制
   res = bin(int(num))
   # 去掉前两位,因为内置函数转换后前面两个字符是0b
   return res[2:]

if __name__ == '__main__':
   print toBin(10)
   #结果10的二进制是1010
   print toBin(8)
   #结果8的二进制是1000
   #根据二进制“与”的计算规则:两个数的相同位都为1时则对比结果为1,否则为0
   #对比结果:1000 转为10进制也就是8
   print 10 & 8
   8

2、或运算

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def toBin(num):
   # 十进制转换成二进制
   res = bin(int(num))
   # 去掉前两位,因为内置函数转换后前面两个字符是0b
   return res[2:]

if __name__ == '__main__':
   print toBin(10)
   #结果10的二进制是1010
   print toBin(8)
   #结果8的二进制是1000
   #根据二进制“或”的计算规则:对应的两个二进位有一个为1时结果位就为1,否则为0
   #对比结果:1010 转为10进制也就是10
   print 10 | 8
   10

3、异或运算

def toBin(num):
   # 十进制转换成二进制
   res = bin(int(num))
   # 去掉前两位,因为内置函数转换后前面两个字符是0b
   return res[2:]

if __name__ == '__main__':
   print toBin(10)
   #结果10的二进制是1010
   print toBin(8)
   #结果8的二进制是1000
   #根据二进制“异或”的计算规则:两个对应的二进位相异时结果为1,否则为0
   #对比结果:0010 转为10进制也就是2
   print 10 ^ 8
   2

4、取反运算

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 正数按位取反
def toBin(num):
   # 十进制转换成二进制
   res = bin(int(num))
   # 去掉前两位,因为内置函数转换后前面两个字符是0b
   return res[2:]

if __name__ == '__main__':
   print toBin(10)
   #结果10的二进制是1010
   #根据二进制“正数取反”的计算规则:首先 10 为正数它的补码应该为 01010,
   #紧接着按位取反为 10101,再转为原码为 11010,再对原码加1为11011,则最后结果为 -11
   print ~10
   -11
   #也可以直接使用公式计算:~10 = -(10 + 1)

5、左移运算

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def toBin(num):
   # 十进制转换成二进制
   res = bin(int(num))
   # 去掉前两位,因为内置函数转换后前面两个字符是0b
   return res[2:]

if __name__ == '__main__':
   print toBin(10)
   #结果10的二进制是1010
   #根据二进制“左移”的计算规则:将位数将左移动,遵循低位补0、高位丢弃
   #向左移动一位
   #对比结果:01010 转为10进制也就是20
   print 10 << 1
   20

6、右移运算

def toBin(num):
   # 十进制转换成二进制
   res = bin(int(num))
   # 去掉前两位,因为内置函数转换后前面两个字符是0b
   return res[2:]

if __name__ == '__main__':
   print toBin(10)
   #结果10的二进制是1010
   #根据二进制“右移”的计算规则:将位数向右移动,遵循低位丢弃、高位补0或补1(正数补0、负数补1)
   #向右移动一位
   #对比结果:0101 转为10进制也就是5
   print 10 >> 1
   5

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。