有没有办法在Python中获取数字的二进制表示?它必须能够代表负数。我已经尝试了numpy np.binary_repr(Decimal(-1))
中的函数,但它会导致错误。确切地说 - 我想以某种方式获得定点数的正二进制表示(正数和负数),因此我可以将它们放入Verilog代码中。
假设我有十进制数1,5
。我想用两位精度和三位整数位和一个符号来写它。在二进制文件中,这将是0001,10
,因此基本上是000110
。我可以手动轻松地做到这一点,但问题是我也有负面的,而且它们在点之后没有有限的扩展(如十进制的1/3
)
更确切地说:如果我有十进制符号-1.5
,分数精度为2,整数精度为2,我希望数字110,10
为输出 - 第一个数字是符号,接下来的两个数字是分数。
答案 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:无耻的插件,我是这个包的作者。