2014-10-10 38 views
0

我正在寻找一种方法来屏蔽掉(设置为'0')Python中整数的最低四位,当我不知道数字的总长度。如果我知道整数的长度事先我可以只设置掩码为0xFF的其余部分,例如,如果该整数将永远是32位长,我可以使用:如何屏蔽掉Python的低'x'位整数的未知大小

number &= 0xfffffff0  

但是,如果我试图用那么64位数字就会掩盖位32-63。我想到的两件事是让掩码真的很长(例如0xffffffffffffffffff0)或将位数作为函数的参数。两者都可能工作得很好,但他们似乎很笨拙。是否有更好/更蟒蛇的方式来做到这一点?

回答

3
number &= ~0xf 

~给出了操作数的二进制反转,所以~0xf相当于0x...fff0为任何整数大小。

0

如果数字可能高达64位,使用64位掩码或“kludgy”没有任何问题。

将位数作为函数的参数将是一个糟糕的选择。为什么要求在不需要时指定某些内容?它只会创造一个错误的机会。

2

语言不可知的答案,因为这实际上更多的是关于一般的掩蔽操作。屏蔽掉的整数最低四位,开始与此:

mask = 2^4 - 1 

(或者,0xf,或15,或任何 - 显示这种方式,使之更加明确一点你怎么可能会改变它你想掩盖了不同长度...)

然后,提取您的变量的低4位:

lowbits = value & mask 

然后,明确在变量那些位:

value = value^lowbits 

^这里代表异或(xor)。

此过程应该以任何语言(只要它具有所需的位操作)工作,并且不管整数位大小如何。

0

这类似于移位左右,但使用乘除:

255 // 16 * 16