2014-04-04 37 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))