专栏首页Python小屋详解Python中的位运算符规则、原理与用法

详解Python中的位运算符规则、原理与用法

在Python中,位运算符包括位与(&)、位或(|)、位求反(~)、位异或(^)、左移位(<<)和右移位(>>)。

1. 运算方法与规则

位运算符只能适用于整数,其总体运算规则为:首先把整数转换为二进制表示形式,按最低位对齐,短的高位补0,然后进行位运算,最后把得到的二进制转换为十进制数。

  • 位与运算符运算规则:0&0=0&1=1&0=0,1&1=1
  • 位或运算符运算规则:0|1=1|0=1|1=1,0|0=0
  • 位求反运算符运算规则:~0=1,~1=0,对于整数x有~x=-(x+1)
  • 位异或运算符运算规则:0^0=1^1=0,0^1=1^0=1
  • 左移位运算符运算规则:原来的所有位左移,最低位补0,相当于乘以2
  • 右移位运算符运算规则:原来的所有位右移,最低位丢弃,最高位使用符号位填充,相当于整除2

2. 举例说明

以13&17为例,首先把13转换为二进制数1101,把17转换为10001,然后按最低位对齐,13的二进制形式高位补0得到01101,按位进行与运算:

01101 <====13

10001 <====17

---------

00001 ====>1

如果要计算13|17,则计算方法如下:

01101 <====13

10001 <====17

---------

11101 ====>29

如果要计算13^17,则计算方法如下:

01101 <====13

10001 <====17

---------

11100 ====>28

以13<<1为例,首先将13转换为二进制形式1101,然后左移1位,最低位补0,得11010,转换为十进制数为26,相当于13*2。

以13>>1为例,首先将13转换为二进制形式1101,然后右移1位,最低位丢弃,最高位使用符号位0补充,得110,转换为十进制数为6,相当于13//2。

位求反比较难理解一些,并不是简单地按位求反。这里的关键在于,计算机内部是使用二进制补码形式来存储数据的,整数的补码与原码相同,而负数的补码为其绝对值的原码各位求反再加1,这是理解位求反运算的关键。以~13为例,计算过程为:首先把13转换为二进制形式00001101(这里以8位为例,这不影响计算过程和结果),各位求反得到11110010,这是一个负数的二进制补码形式,其对应的数值是-14。再以~(-123)为例,首先将其转换为二进制补码形式10000101,然后按位求反得01111010,转换为十进制为122。

3. Python中位运算符的用法

>>> 13 & 17

1

>>> 13 | 17

29

>>> 13 ^ 17

28

>>> 13 << 1

26

>>> 13 >> 1

6

>>> ~13

-14

>>> ~(-123)

122

本文分享自微信公众号 - Python小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-03-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python类中公开方法、私有方法和特殊方法的继承原理

    在Python中,对象的私有成员在类外部、派生类或程序中无法直接访问,但是可以通过“对象名._类名__私有成员名”这样一种特殊的形式来访问。 基类的构造方法和公...

    Python小屋屋主
  • Python内置函数sorted()和列表方法sort()排序规则不得不说的事

    Python内置函数sorted()和列表方法sort()可以使用key参数指定排序规则,并且都是稳定排序,也就是说,对于指定规则不能涵盖的元素,本来谁在前面,...

    Python小屋屋主
  • Python中的数组类型

    Python没有提供内置的数组类型,但是通过标准库array提供了array类支持数组的创建与使用,可以创建的数组类型包括整数、实数、Unicode字符等等,可...

    Python小屋屋主
  • Utility之负数取模

    表内除法:12÷4=3 整数除法:13÷4=3…1 整数整除:13/4是等于3吗? 负数取模:-13%4等于多少?13%-4呢?-13%-4呢?

    Taishan3721
  • HDUOJ-----1098 Ignatius's puzzle

    Ignatius's puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/...

    Gxjun
  • SAP云平台上的Business Partner业务合作伙伴和账户主数据服务

    Jerry Wang
  • 我国大陆地区的手机号正则匹配

    大数据工程师-公子
  • 我国大陆地区的手机号正则匹配

    大数据工程师-公子
  • 域名切换及HTTPS协议改造需要做哪些工作

    去年(16年)年末,在苹果等大厂商的推动下,很多公司掀起了一股全站HTTPS化改造的热潮。58到家也做了这个工作,当时,58到家大量业务所使用的域名在jzt.5...

    普通程序员
  • 大数据中的BitMap是什么?| MTdata小讲堂

    *杨亚强 2016 年作为数据架构师加入美图数据平台部。具有多年的数据架构经验,作为资深架构师,长期负责各类系统的架构和研发工作,也作为主程参与过多个大型系统的...

    美图数据技术团队

扫码关注云+社区

领取腾讯云代金券