我有一个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
答案 0 :(得分:1)
除了模糊你的意图并采取多条指令之外,没有。
如果您想100%确定,请将查询提供给可以理解位向量和二元运算符(如Z3)的SMT求解器。它将证明陈述是否相等(扰乱者:他们是);在线代表是here。
x = BitVec('x', 32)
prove(x & 0xFFFF0000 == ((x >> 16) << 16))