在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中的位运算符规则、原理与用法相关推荐

  1. python apply lambda if_详解Python中的map、lambda和apply用法

    Hello大家好,欢迎来到[统计GO],本公众号内容主要针对数据分析的爱好者,不定期分享一些好用的数据分析工具和机器学习资料,以及一些求职必备技能,帮助大家花更少的时间学更多的知识. 今天为大家推荐的 ...

  2. python中groupby()函数讲解与示例_详解python中groupby函数通俗易懂

    一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[ ...

  3. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

  4. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  5. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  6. python操作目录_详解python中的文件与目录操作

    详解python中的文件与目录操作 一 获得当前路径 1.代码1 >>>import os >>>print('Current directory is ',os. ...

  7. python中list[1啥意思_详解Python中list[::-1]的几种用法

    本文主要介绍了Python中list[::-1]的几种用法,分享给大家,具体如下: s = "abcde" list的[]中有三个参数,用冒号分割 list[param1:para ...

  8. pythonnamedtuple定义类型_详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...

  9. python停止线程池_详解python中Threadpool线程池任务终止示例代码

    需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...

最新文章

  1. 深度报告:芯片设计EDA 2.0时代,三大路径搞定六大挑战
  2. 用模板来进行类型检查。
  3. C语言结构体赋值和有指针成员的结构体赋值
  4. 组合数据类型综合练习
  5. login窗口for mysql_CTF| SQL注入之login界面
  6. 直接上干货!技术水平真的很重要!复习指南
  7. html跨行使用的属性,HTML表格标记详解4:TD参数中设定跨列跨行属性
  8. mut a:T 和a:mut T的区别
  9. MySQL的详细安装教程和配置过程(附安装包)
  10. Android仿虾米音乐播放器之专辑图片模糊处理
  11. C# 在 Excel 中创建组合图表
  12. pagefile.sys删除
  13. html怎么在表格中加虚线,html设置虚线边框的方法详细介绍
  14. js控制键盘按键(回车、空格)
  15. 微型计算机结构框图,微型计算机系统结构图.doc
  16. 为什么机器学习之路没有捷径可走
  17. Verilog 总结
  18. MIPI通讯的初理解
  19. MATLAB---形态学滤波
  20. 北斗和GPS定位在室外非常好用,但当手机进入室内时,它们的定位功能就很不准,甚至无法定位。我们可以开启WLAN扫描定位WIFI模块固定编码或者开启手机的A-GPS辅助定位通过基站,A-GPS服务器定位

热门文章

  1. 计算机多媒体技术怎么考一建,一建考试视频
  2. php写else老是报错,调试PHP错误经常用到的一些
  3. mysql timestamp 默认值是什么#039;_MYSQL中TIMESTAMP类型的默认值
  4. 基于JAVA+Servlet+JSP+MYSQL的牙科诊所管理系统
  5. Error:No cached version of com.android.tools.build:gradle:2.0.0 available for offline mode
  6. 计算机网络DNS域名配置,如何设置计算机的IP地址和DNS域名服务器
  7. java复制和上传_java文件上传复制等功能
  8. 关于SQL server事务
  9. 【转】sqlserver使用sql导出索引
  10. Java语言基础(2)