当我不知道数字的总长度时,我正在寻找一种方法来掩盖(设置为'0')Python中整数的最低四位。如果我事先知道整数的长度,我可以将掩码的其余部分设置为0xff,例如,如果整数总是32位长,我可以使用:
number &= 0xfffffff0
但如果我尝试使用64位数字,那么它会屏蔽掉32-63位。我想到的两件事是让掩模真的很长(例如0xffffffffffffffffff0)或者将位数作为函数的参数。两者都可能运作得很好,但它们看起来很糟糕。是否有更好/更多的Pythonic方法来做到这一点?
答案 0 :(得分:3)
number &= ~0xf
~
给出了操作数的二进制倒数,因此对于任何整数大小,~0xf
等同于0x...fff0
。
答案 1 :(得分:2)
与语言无关的答案,因为这更多地是关于屏蔽操作。要掩盖整数的最低四位,请从以下开始:
mask = 2^4 - 1
(或者,0xf
,或15
,或其他任何东西 - 以这种方式显示它如何更清楚地说明如何根据您想要屏蔽的不同长度更改它...)
然后,提取变量的最低4位:
lowbits = value & mask
然后,清除变量中的那些位:
value = value ^ lowbits
^
此处代表exclusive-or(xor)。
此过程应该以任何语言工作(前提是它具有所需的位操作),并且无论整数位大小如何。
答案 2 :(得分:0)
如果数字可能高达64位,那么使用64位掩码没有任何问题或“kludgy”。
将位数作为参数作为函数将是一个糟糕的选择。为什么要求在不需要时指定某些内容?这只会造成错误的机会。
答案 3 :(得分:0)
这类似于转移,但使用乘法和除法:
255 // 16 * 16