Python中二进制分数的模式

时间:2010-11-10 19:14:42

标签: python binary numbers

研究模式识别需要识别有理数的分数二进制表示中的重复模式。 bin(2**24/n) 删除前导零,例如bin(2**24/11) - > 0b101110100010111010001代替0b000101110100010111010001。前导零的数量当然是可变的。这里显而易见的模式是0001011101 ...

我仍然是学习曲线上的Python。是否有适合Python的方法来解决这个问题?

2 个答案:

答案 0 :(得分:4)

这可以通过字符串格式在2.6 +:

中完成
>>> '{0:024b}'.format(23)
'000000000000000000010111'

答案 1 :(得分:2)

如果您有比字符串格式化更高级的需求,您可能会发现bitstring模块很有用。

>>> from bitstring import BitArray
>>> a = BitArray(24)          # 24 zero bits
>>> a.uint = 2**24/11         # set the unsigned integer propery
>>> a.bin                     # get the binary propery
'000101110100010111010001'

它永远不会切断前导零位,并且可以做一些其他有用的技巧

>>> a.uint /= 2
>>> a.bin
'000010111010001011101000'
>>> list(a.findall('0b1011'))
[4, 14]
>>> a *= 2     # concatenation
>>> a.bin
'000010111010001011101000000010111010001011101000'
>>> a.replace('0b00001', '0xe')
2              # 2 replacements made
>>> a.bin
'1110011101000101110100011100111010001011101000'

我不确定你的确切需求是什么,所以这一切都可能有点过分,你可能不想在任何情况下都使用外部库,但Python内置的对位数组的支持有点基础。 / p>