《Python语言程序设计》 —2.3.6 位运算符
2.3.6 位运算符
位运算是指对二进制数进行逐位运算,因此在给出各位运算符的功能前,先介绍十进制数和二进制数的相互转换方法。由于位运算符要求运算数必须是整数,所以这里只给出整数的转换规则,小数的转换规则读者可参阅其他资料。
十进制整数转换为二进制采用“除基取余法”:用2去除十进制整数,得到商和余数;如果商不为0,则继续用2除,再得到商和余数,重复该步骤直至商为0;最后将余数按照从后至前的顺序排列,即得到转换后的二进制数。
提示 “除基取余法”中的“基”是指基数,基数即为一种数制中可用数码的个数。二进制可用的数码只有0和1两个,所以二进制的基数是2。
下面以26转换为二进制数为例说明“除基取余法”的具体步骤。如图2-4所示,首先,用26除以2,商13、余0;然后,对得到的商不断用2除,直至商为0,依次得到如下结果:商6、余1,商3、余0,商1、余1,商0、余1;最后,将得到的余数按照从后向前的顺序排列,得到最后的转换结果,即11010B(以B作为后缀表示这是一个二进制数)。
二进制数转十进制数的规则是“按权展开求和”,即将二进制数的每一位写成数码乘以位权的形式,再对乘积求和。例如,对于二进制数11010B,其对应的十进制数如下:
11010B=1*24+1*23+0*22+1*21+0*20
=1*16+1*8+0*4+1*2+0*1
=16+8+0+2+0
=26
提示 对于任何一种数制,一个数码在不同的位上所表示的值大小不同,它的值等于数码乘以该数码所在位的位权。位权是基数的整数次幂,小数点左边第一位的位权是基数的0次幂,左边第二位的位权是基数的1次幂,依次类推。
例如,对于十进制数333,百位上的3表示300(3*102),而十位和个位上的3分别表示30(3*101)和3(3*100)。对于二进制数11010B,从左到右的3个1的值分别是16(1*24)、8(1*23)和2(1*21)。
Python中的位运算符如表2-7所示。
表2-7 位运算符
这里通过代码清单2-6理解各位运算符的作用和使用方法。
代码清单2-6 位运算符使用示例
1 i1,i2=3,6 #i1对应的二进制数是11B,i2对应的二进制数是110B
2 print(i1&i2) #输出2。计算方法:011B&110B=010B=2
3 print(i1|i2) #输出7。计算方法:011B|110B=111B=7
4 print(i1^i2) #输出5。计算方法:011B^110B=101B=5
5 print(i1<<1) #输出6。计算方法:11B<<1=110B=6
6 print(i1>>1) #输出1。计算方法:11B>>1=1B=1
执行完毕后,第2~6行代码分别按对应注释中的描述输出结果。这里以第2行代码为例说明位运算的具体方法,如下所示:i1和i2对应的二进制数分别是11B和110B;首先,按小数点将两个运算数对齐,缺少的位补0;然后,对于每一个二进制位分别做“与”运算,两个运算数只有右数第2位的值都为1,所以运算结果中只有右数第2位的值为1,其他位的值均为0;最后,将二进制结果010B转为十进制数2。
- 点赞
- 收藏
- 关注作者
评论(0)