用Python分析二进制小数的模式
研究模式识别需要找出有理数的分数在二进制表示中重复的模式。bin(2**24/n)
这个函数会去掉前面的零,比如说,bin(2**24/11)
的结果是0b101110100010111010001
,而不是0b000101110100010111010001
。前面的零的数量是变化的。这里明显的模式是0001011101...
我还是个Python新手,正在学习中。有没有适合Python的方法来处理这个问题呢?
2 个回答
4
这可以通过字符串格式化来实现,从2.6版本开始就可以用了:
>>> '{0:024b}'.format(23)
'000000000000000000010111'
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自带的位数组支持功能有点简单。