Python语言能够对整数进行逐位操作,它支持的运算符及含义如下所示:
&:按位与
|:按位或
^:按位异或
~:取反
<<:左移
>>:右移
对于整型数据,各种位操作是对该数据的补码进行的(正数的补码与原码相同,下面举例皆以正数为例);对于长整型数据,由于其位宽不定,所以进行位运算时,认为其补码的符号位向外无限扩展。下面对各运算符进行举例说明:
(1)首先看取反
>>> ~1
-2
>>> ~0x0001
-2
>>> 
正整数1,int型是32位的,就是00000000 00000000 00000000 00000001 求反变为11111111 11111111 11111111 11111110,这正好是-2的补码。同样十六进制的0x0001结果是一样的。
(2)按位与
>>> 1&2
0
>>> 1&3
1
>>> 
对于按位与,就是对参加运算的两个整数的补码逐位进行逻辑与运算,即参加运算的两个运算量,如果两个相应位都为1,则该位的结果为1,否则为0。
(2)按位或
>>> 1|1
1
>>> 1|2
3
>>> 
对于按位或,就是对参加运算的两个数字的补码逐位进行逻辑或运算,即参加运算的两个运算量,只要两个相应位中有一个为1,那么该位的结果为1;只有两个相应位都为0时,该位的结果才为0。
(3)按位异或
>>> 1^1
0
>>> 1^2
3
>>> 
对于按位异或,就是对参加运算的两个数字的补码逐位进行逻辑异或运算,即参加运算的两个运算量,如果两个相应位相同,那么该位的结果为0;如果两个相应位不同即相异,那么该位的结果为1。
(4)左移运算
>>> 1<<2
4
>>> 
对于左移运算,就是将一个数的二进制位整体向左移若干位,移位后在低位补零,高位溢出部分舍弃。所以1<<2就是把整数1的二进制补码00000000 00000000 00000000 00000001整体左移2位,舍弃溢出的高位并在低位补零后得到结果00000000 00000000 00000000 00000100,正好是十进制数4。实际上,将一个数左移几位,就相当于将这个数乘以2的几次幂。
(5)右移运算
>>> 4>>2
1
>>> 
对于右移运算,就是将一个数的二进制位整体向右移若干位,如果该数为正数,移位后的低位溢出部丢弃,高位补零;如果该数为负数,则移位后的低位溢出部丢弃,高位补1,以保持符号不变。所以4>>2就是把正整数4的二进制补码00000000 00000000 00000000 00000100整体右移2位,舍弃溢出的低位并在高位补零后得到结果00000000 00000000 00000000 00000001,正好是十进制数1。实际上,将一个数右移几位,就相当于将这个数除以2的几次幂。
在优先级方面,取反运算符~跟算术运算符中的单目运算符(即只有一个操作数参加运算)同级,并且是所有位运算符中优先级最高的;然后是移位运算符(左移<<和右移>>),它们比取反运算符和算术运算中的加减运算符低;最后是逐位与、或和异或运算符。各位运算符按照优先级有高到低排列如下所示:
取反运算符 > 左移运算符 > 右移运算符 > 按位与运算符 > 按位异或运算符 > 按位或运算符
在位运算符中,取反运算符(单目运算符)~的结合性是从右向左结合,其余双目运算符的结合性是从左向右结合。

转载于:https://blog.51cto.com/opslinux/1140754

Python的二进制位运算相关推荐

  1. Java二进制位运算、移位运算、、

    为什么80%的码农都做不了架构师?>>>    Java二进制位运算.移位运算 思考题 1.请看下面的代码段,回答a,b,c,d,e结果是多少? public static void ...

  2. python中的运算和运算符

    运算和运算符 运算: 由一个以上的值经过变化得到新值得过程,就是运算. 运算符: 用于运算的符号,就是运算符 运算的分类: 1.算数运算 2.比较运算/关系运算 3.赋值运算 4.逻辑运算 5.位运算 ...

  3. 二进制位运算中‘1’的个数

    题目描述 现在夯夯和朱朱饿了,他们想去吃点东西,他们发现店里东西的价格都是2的次方倍(20, 21,22-)现在夯夯和朱朱想把他们的的钱全都用掉.想知道他们最少能吃多少东西,最多能吃多少东西? 输入格 ...

  4. c语言位运算负数的实例_JavaScript基础教程(四)二进制位运算

    JavaScript基础教程二进制位运算 JavaScript中的位运算是针对二进制数据提供的运算与操作.在JavaScript标准中规定了二进制位运算时其操作数长度为32位,其最高位为符号位,因此能 ...

  5. python 数字运算及格式化_Python基础教程(3)Python数据类型、运算与格式化

    一.Python的数据类型 主要分为了数字型和非数字型两个大类,其中数字型又包含整形(int).浮点型(float).布尔型(bool),而非数字分为字符串(str).列表(list).元组(tupl ...

  6. Python 取模运算(取余)%误区及详解

    Python 取模运算(取余)%误区及详解 首先,必须要先明确一个概念(针对新手),不要用数学求余数角度来思考模运算,python.Java等各种语言都有其不同的运行机制. python的模运算计算规 ...

  7. python中幂运算_python里幂运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! "**"运算这个"**"比较简单,就是标 ...

  8. python中幂运算_python的幂运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! "**"运算这个"**"比较简单,就是标 ...

  9. python中幂运算_python中幂运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! "**"运算这个"**"比较简单,就是标 ...

最新文章

  1. 函数学习-bool()
  2. ubuntu分区初探
  3. vue 打包后页面空白问题
  4. flex 添加右键链接
  5. AI「抄」代码无罪?GitHub Copilot拿用户的开源代码改一改就去挣钱!
  6. php写两个数相加方法_【PHP学习】实现两个n位二进制整数相加
  7. 算法高级(28)-递归、分治、动态规划、贪心、回溯、分支限界几大相似算法比较
  8. spikingjelly里面的元组处理方式
  9. 2018-1-2Linux基础知识(19)vi编辑器及bash算数
  10. php团队规范,PHP团队 编码规范 代码样式风格规范
  11. 【Flutter】基础组件【02】Container
  12. 为qt程序添加ico图标
  13. 十、线程(11 章)
  14. spring boot校园二手销售网站 毕业设计源码161417
  15. Oscar-实验过程记录
  16. PMP就是个垃圾证书,YES or NO
  17. 网页游戏行业真的火爆吗?该如何选择?
  18. 脾胃不好,有哪些在家可以做的暖胃汤方?
  19. 《大数据: Flume 多个Agent 串联(AvroSource、AvroSink)》
  20. 国产操作系统openEuler22.03配置yum源

热门文章

  1. 从程序员到项目经理(24):慎于问敏于行 - 忠于工作不等于奴性
  2. OpenCV统计应用-CvHistogram直方图资料
  3. deeplab v3+---Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
  4. 前端笔记 | HTML基础
  5. ctrl z撤销后如何恢复_偏瘫后如何恢复?偏瘫家庭功能锻炼方法送给你
  6. c语言troubc int类型占几个字节,程序设计基础(C)第06讲例程
  7. 电商扣减库存_竞争激烈的电商市场,小型仓储外包服务解决了中小电商的后顾之忧...
  8. java打印堆栈信息linux,在C/C++程序里打印调用栈信息(转载)
  9. char数组转换成字符串_将字符串转换为char数组java –将字符串转换为char
  10. SQL Where子句