2014-04-04 163 views
0

我有一个32位数字,我想将最后16位设置为零。在Python:按位和左/右移

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

通常情况下,我会做的数量和位掩码之间的位与

# 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 
+5

我认为'a&0xFFFF0000'更清晰 – user3159253

+0

反过来。首先,你的右移然后离开。你有负号吗? – Carsten

+0

行动,对不起。不,没有负数。 –

回答

1

除了混淆你的意图和采取一个以上的指令,没有。

如果您想100%确定,请将您的查询输入到SMT解算器中,该解算器可以理解位向量和二元运算符(如Z3)。它会证明这些陈述是否相同(扰流:他们是);在线编号为here

x = BitVec('x', 32) 

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