用Python分析二进制小数的模式

3 投票
2 回答
522 浏览
提问于 2025-04-16 06:52

研究模式识别需要找出有理数分数二进制表示中重复的模式。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自带的位数组支持功能有点简单。

撰写回答