《Python语言程序设计》 —2.3.6 位运算符

举报
华章计算机 发表于 2019/11/18 19:49:19 2019/11/18
【摘要】 本节书摘来自华章计算机《Python语言程序设计》一书中第2章,第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

image.png

提示 对于任何一种数制,一个数码在不同的位上所表示的值大小不同,它的值等于数码乘以该数码所在位的位权。位权是基数的整数次幂,小数点左边第一位的位权是基数的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 位运算符

image.png

 

这里通过代码清单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。

image.png

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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