固定点数的自定义二进制表示

时间:2017-04-05 09:37:40

标签: python-3.x binary fixed-point

有没有办法在Python中获取数字的二进制表示?它必须能够代表负数。我已经尝试了numpy np.binary_repr(Decimal(-1))中的函数,但它会导致错误。确切地说 - 我想以某种方式获得定点数的正二进制表示(正数和负数),因此我可以将它们放入Verilog代码中。

假设我有十进制数1,5。我想用两位精度和三位整数位和一个符号来写它。在二进制文件中,这将是0001,10,因此基本上是000110。我可以手动轻松地做到这一点,但问题是我也有负面的,而且它们在点之后没有有限的扩展(如十进制的1/3

更确切地说:如果我有十进制符号-1.5,分数精度为2,整数精度为2,我希望数字110,10为输出 - 第一个数字是符号,接下来的两个数字是分数。

3 个答案:

答案 0 :(得分:1)

bin(number)可能是您正在寻找的功能。它支持负数,但有一些特殊的格式

>>> bin(4)
'0b100'
>>> bin(-3)
'-0b11'
>>> bin(10000000)
'0b100110001001011010000000'

您可以构建类似的东西,将其转换为更常见的表示法:

def binary(number):
    b = bin(number)
    if b[0] == '-':
        return '-' + b[3:]
    else:
        return b[2:]

答案 1 :(得分:0)

我为此推荐 fxpmath 模块。

回购网站是:https://github.com/francof2a/fxpmath

from fxpmath import Fxp

x = Fxp(-1.5, True, 5, 2)   # (val, signed, n_word, n_frac)

print(x.bin())

结果:

11010

答案 2 :(得分:0)

您可以使用 Binary fractions 包。使用此包,您可以将二进制分数字符串转换为浮点数,反之亦然。

示例:

>>> from binary_fractions import Binary
>>> str(Binary(-1.5))
'-0b1.1'
>>> float(Binary("-1.1"))
-1.5

它有更多的辅助函数来操作二进制字符串,例如:shift、add、fill、to_exponential、invert...

PS:无耻的插件,我是这个包的作者。