Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何掩盖较低的';x';大小未知的Python整数的位_Python_Python 2.7_Bit Manipulation_Bitmask - Fatal编程技术网

如何掩盖较低的';x';大小未知的Python整数的位

如何掩盖较低的';x';大小未知的Python整数的位,python,python-2.7,bit-manipulation,bitmask,Python,Python 2.7,Bit Manipulation,Bitmask,当我不知道整数的总长度时,我正在寻找一种方法来屏蔽(设置为“0”)Python中整数的最低四位。如果我事先知道整数的长度,我可以将掩码的其余部分设置为0xff,例如,如果整数总是32位长,我可以使用: number &= 0xfffffff0 但如果我尝试在那里使用64位数字,那么它会屏蔽32-63位。我想到的两件事是使掩码非常长(例如0xFFFFFFFFFFFFFFFF0)或将位数作为函数的参数。这两种方法可能都能很好地工作,但它们看起来都很笨拙。有没有更好的/更具Pyth

当我不知道整数的总长度时,我正在寻找一种方法来屏蔽(设置为“0”)Python中整数的最低四位。如果我事先知道整数的长度,我可以将掩码的其余部分设置为0xff,例如,如果整数总是32位长,我可以使用:

number &= 0xfffffff0     

但如果我尝试在那里使用64位数字,那么它会屏蔽32-63位。我想到的两件事是使掩码非常长(例如0xFFFFFFFFFFFFFFFF0)或将位数作为函数的参数。这两种方法可能都能很好地工作,但它们看起来都很笨拙。有没有更好的/更具Python风格的方法来实现这一点?

如果数字可能达到64位,那么使用64位掩码并没有什么错,也没有什么“笨拙”的地方

将位数作为函数的参数将是一个糟糕的选择。当不需要的时候,为什么要求指定某个东西?这只会为犯错误创造机会

number &= ~0xf

~
给出了操作数的二进制反转,因此对于任何整数大小,
~0xf
相当于
0x…fff0

语言不可知的答案,因为这实际上更多的是关于一般的掩蔽操作。要屏蔽整数中的最低四位,请从以下内容开始:

mask = 2^4 - 1
(或者,
0xf
,或
15
,或其他任何东西-以这种方式显示,以使其更清楚地显示您可能如何更改它以获得想要遮罩的不同长度…)

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

lowbits = value & mask
value = value ^ lowbits
然后,清除变量中的这些位:

lowbits = value & mask
value = value ^ lowbits
^
这里表示异或(xor)


此过程应适用于任何语言(前提是它具有所需的位运算),且与整数位大小无关。

这类似于移位,但使用乘法和除法:

255 // 16 * 16

在Python中,这将是
mask=2**4-1