2019-01-30
阅读量:
860
python面试可能会遇到的位运算符计算?
python运算符有七大类,分别是:
- 算术运算符
- 比较(关系)运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
其中使用较少,但是常常被用来做面试题的便有“位运算符”,下面我们来看看如何理解它
要理解位运算符,先来理解二进制:
二进制表示60,即为0011 1100,翻译过来就是--
60=0*2**7+0*2**6+1*2**5+1*2**4+1*2**3+1*2**2+0*2**1+0*2**0
再来理解位运算符都有哪些计算逻辑:
60和13的二进制表达为--
60=0011 1100 13=0000 1101
1)&:按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
- 60&13=0000 1100=0*2**7+0*2**6+0*2**5+0*2**4+1*2**3+1*2**2+0*2**1+0*2**0=12
2)|:按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1
- 60|13=0011 1101=0*2**7+0*2**6+1*2**5+1*2**4+1*2**3+1*2**2+0*2**1+1*2**0=61
3)^:按位异或运算符:当两对应的二进位相异时,结果为1
- 60^13=0011 0001=0*2**7+0*2**6+1*2**5+1*2**4+0*2**3+0*2**2+0*2**1+1*2**0=49
4)~:按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x类似于-x-1
- ~60=-(0011 1100+1)=-0011 1101
- =-(0*2**7+0*2**6+1*2**5+1*2**4+1*2**3+1*2**2+0*2**1+1*2**0)=-61
计算机中的符号数有3种表示方法,即原码、反码和补码;3种方法均有符号位和数值位,符号位0表示正,1表示负
欲求其原码,需先对其取“反”,然后再加1;也可以简单理解为~a=-(a+1)
5)<<:左移动运算符:运算数的各二进位全部左移若干位,由<<右边的数字指定了移动的位数,高位丢弃,低位补0
- 60<<2=1111 0000=1*2**7+1*2**6+1*2**5+1*2**4+0*2**3+0*2**2+0*2**1+0*2**0=240
6)>>:右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>>右边的数字指定了移动的位数
- 60>>2=0000 1111=0*2**7+0*2**6+0*2**5+0*2**4+1*2**3+1*2**2+1*2**1+1*2**0=15






评论(0)


暂无数据
推荐帖子
0条评论
0条评论
0条评论