研究模式识别需要识别有理数的分数的二进制表示中的重复模式。 bin(2**24/n)
删除前导零,例如bin(2**24/11)
- > 0b101110100010111010001
代替0b000101110100010111010001
。前导零的数量当然是可变的。这里显而易见的模式是0001011101 ...
我仍然是学习曲线上的Python。是否有适合Python的方法来解决这个问题?
答案 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>