按位和vs左/右移位

用户

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

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

通常,我会在数字和位掩码之间做一个位和。在

^{pr2}$

在这种特殊情况下,将数字移16位,然后将移位回16位,是否有任何缺点?在

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


已被浏览了9026次
更新日期: 2020-10-28 19:12:23
1 个回答
fefe Tyson

除了混淆你的意图和接受不止一条指令之外,不

如果你想100%确定,把你的查询输入一个可以理解位向量和二进制运算符的SMT解算器,比如Z3。它将证明语句是否相等(spoiler:它们是);在线repl是here。在

x = BitVec('x', 32)

prove(x & 0xFFFF0000 == ((x >> 16) << 16))
评论 - 2020年9月11日 20:34

最新Python问答

推荐Python问答