按位和左/右移位

时间:2014-04-04 09:45:11

标签: python bit-manipulation bitwise-operators bit-shift

我有一个32位数字,我想将最后16位设置为零。在Python中:

#a is in base 10
In [143]: a
Out[143]: 536899058

通常,我会在数字和位掩码之间执行按位AND

# 11111111 11111111 00000000 00000000 is 4294901760 in base 10
In [145]: a & 4294901760
Out[145]: 536870912L

在这种特殊情况下,移位 16位,然后移回是否有任何缺点由16个职位组成?

In [146]: (a >> 16) << 16
Out[146]: 536870912

1 个答案:

答案 0 :(得分:1)

除了模糊你的意图并采取多条指令之外,没有。

如果您想100%确定,请将查询提供给可以理解位向量和二元运算符(如Z3)的SMT求解器。它将证明陈述是否相等(扰乱者:他们是);在线代表是here

x = BitVec('x', 32)

prove(x & 0xFFFF0000 == ((x >> 16) << 16))