《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。
- 点赞
- 收藏
- 关注作者
评论(0)