我一直在尝试理解Python脚本,但我无法弄清楚这项任务的作用:
data_byte2 = value >> 7 & 127
我已经看到了or
运算符的类似构造,但从未与&
一起看过,我根本不知道>>
做了什么(没有什么' s谷歌即将上映。)
答案 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)
如果以二进制形式查看数字,这将更容易看到。
>>> 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
的每个位,其中两个输入均为1
,0
。鉴于此
>>> 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