使用“>>”进行变量赋值和“&”运营商

时间:2014-12-10 12:42:29

标签: python operators bitwise-operators

我一直在尝试理解Python脚本,但我无法弄清楚这项任务的作用:

data_byte2 = value >> 7 & 127

我已经看到了or运算符的类似构造,但从未与&一起看过,我根本不知道>>做了什么(没有什么' s谷歌即将上映。)

3 个答案:

答案 0 :(得分:4)

value >> 7 & 127

就像写作:

(value >> 7) & 127  # see Python Operators Precedence

首先,您将value向右移动7,然后将&结果移至127。

127二进制文件为1111111,当您使用此编号&时,您将清除该数字左侧的所有位。例如,如果您有16位数字:

1101011101111101
→

向右移动7将导致:

0000000110101110
带有127的

&将仅保留最右边的8位:

0000000110101110
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
0000000001111111  & (127)
----------------
0000000000101110

答案 1 :(得分:2)

>>是正确的位移运算符,&是按位AND。

如果以二进制形式查看数字,这将更容易看到。


>>> format(13, "08b")
'00001101'
>>> format(13 >> 1, "08b")
'00000110'

您可以看到二进制数字右移一个位置(这相当于2的除法,因此x >> y相当于x // (2 ** y))。在此基础上,x >> 7表示x的位移到右边的七个位置“,或”将x除以128 }“


>>> format(10, "08b")
'00001010'
>>> format(7, "08b")
'00000111'
>>> format(10 & 7, "08b")
'00000010'

此处输出包含1的每个位,其中两个输入均为10。鉴于此

>>> format(127, "08b")
'01111111'

x & 127表示“取x 的最后七位。


由于>>的{​​{3}}高于&,因此表达式

value >> 7 & 127

表示value除以128,然后取最后七位“

答案 2 :(得分:0)

>>是右移运算符

>>> 3 >> 1
1

3的二进制是00011,现在向右移一位所以它将是00001所以我们得到答案1

>>> 3 >> 2
0

3的二进制是00011,现在向右移两位,所以它将是0000,所以输出为0