《Python 3.x入门到应用实践》 — 3.5 位运算符

举报
华章计算机 发表于 2020/02/08 23:27:39 2020/02/08
【摘要】 本节书摘来自华章计算机《Python 3.x入门到应用实践》 一书中第3章,第3.5节,作者是赵 军 等。

  3.5  位运算符

计算机在底层实际处理的数据其实只有0与1两种,也就是采取二进制形式,二进制的每一个位(bit)也称为比特。因此,我们可以使用位运算符(bitwise operator)来进行位与位之间的逻辑运算。

位逻辑运算符特别针对整数中的位值进行计算。在Python语言中提供了4种位逻辑运算符,分别是&、|、^与~,可参考表3-8的说明。

表3-8

image.png

接下来举例说明。

1. &(AND,位逻辑“与”运算符)

执行AND运算时,对应的两个二进制位都为1,运算结果才为1,否则为0。例如,a=12,b=38,则a&b得到的结果为4,因为12的二进制表示法为0000 1100,38的二进制表示法为0010 0110,两者执行AND运算后,结果为十进制的4,如图3-6所示。

 image.png

图3-6

2. ^(XOR,位逻辑“异或”运算符)

执行XOR运算时,对应的两个二进制位其中任意一个为1(true),运算结果即为1(true),不过当两者同时为1(true)或0(false)时,结果为0(false)。例如a=12,b=38,则a^b得到的结果为42,如图3-7所示。

 image.png

图3-7

3. |(OR)

执行OR运算时,对应的两个二进制位其中任意一个为1,运算结果为1,也就是只有两个都为0时,结果才为0。例如a=12,b=38,则a|b得到的结果为46,如图3-8所示。

 image.png

图3-8

4. ~(NOT)

NOT的作用是取1的补码,即所有二进制位取反,也就是所有位的0与1互换。例如a=12,二进制表示法为0000 1100,取补码后,由于所有位的0与1都会进行互换,因此运算后的结果为-13,如图3-9所示。

 image.png

图3-9

所谓“补码”,是指两个数字加起来等于某个特定数(如十进制即为10)时,就称这两个数互为该特定数的补码。例如3的10补码为7,同理7的10补码为3。对二进制系统而言,则有“1补码系统”和“2补码系统”两种,“1补码系统”是指如果两数之和为1,这两个数就互为1的补码,即0和1互为1的补码。也就是说,打算求得二进制数的补码,只需将0变成1,1变成0即可。例如(01101010)2的1补码为(10010101)2。“2补码系统”则必须事先计算出该数的1补码,再加1即可。

以下范例程序是位运算符应用的实例。

 

 

 【范例程序:bit_operator.py】 位运算符的综合应用

01  # -*- coding: utf-8 -*-

02  """

03  位运算符的综合应用

04  """

05  x = 12; y = 38

06  bin(x); bin(y)  # 调用bin()函数将x、y转为二进制

07  print(x & y)    # &运算结果是00000100,再转成十进制数值

08  print(x ^ y)    # ^运算结果是00101010,再转成十进制数值

09  print(x | y)    # |运算结果是00101110,再转成十进制数值

10  print(~x)        # ~运算结果是取2的补码

程序的执行结果如图3-10所示。

 image.png

图3-10

程序代码解析:

      第07行:x=12的二进制表示法是x=00001100,y=38的二进制表示法是y=00100110,&位逻辑运算的结果是00000100,再转成十进制数值为4。

      第08行:x=12的二进制表示法是x=00001100,y=38的二进制表示法是x=00100110,^位逻辑运算的结果是00101010,再转成十进制数值为42。

      第09行:x=12的二进制表示法是x=00001100,y=38的二进制表示法是x=00100110,|位逻辑运算的结果是00101110,再转成十进制数值为46。

      第10行:x=12的二进制表示法是x=00001100,其取2的补码的运算结果是11110011,再转成十进制数值为-13。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。