2013-06-24 13 views
1

首先,我不是一个Python的专家,所以这是我的话题:Python的反转一些

我要反转了许多,让说number = "ABCD123"(是的,这是一个字符串,但我需要做的这样...),问题是我并不真正满意Python处理反转的方式,例如~0xABCD123-180146468,我不想要MSB但只有“当前”位被反转。我可以像~0xABCD123 & 0XFFFFFFF但数量实际上可以改变的大小去...

问题

有动态“中投”或与运营商~取出位符号在Python的方式

+1

如果你想要做什么,你说,为什么不并将其与16 **(你的字符串长度) - 1? –

+0

例如我有'0XD5'这是二进制'11010101',当我做'〜0xD5'结果是'-214',但我想要的结果是像'00101010'这样的反转。也许我误解了Python的'〜' – Jaay

+2

的概念。在这种情况下,您最好使用FF..F异或。我不认为Python中有无符号整数。 –

回答

4

一个简单的黑客:

def invert_int(n): 
    number_bit_len = n.bit_length() 
    max_val = (2 ** number_bit_len) - 1 
    return ~n & max_val 
+1

你可以用'n.bit_length()'替换前两行,这也是大整数更可靠。同样使用'2 ** number_bit_len - 1'可以用于任何整数大小,而'math.pow'则会失败。 – Bakuriu

+0

不知道:) –

+0

['bit_length'](http://docs.python.org/dev/library/stdtypes.html#int.bit_length)是python 3 only – Eric