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

3.5  位运算符

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

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

表3-8

接下来举例说明。

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

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

图3-6

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

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

图3-7

3. |(OR)

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

图3-8

4. ~(NOT)

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

图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所示。

图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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值