2017-04-05 22 views
-1

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

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

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

+0

有趣,但你能告诉我们输入及期望输出中? Verilog与python内部数字表示有什么关系?我想你想“模仿”Verilog代码预期的数字表示。 –

+0

这不是关于蟒蛇内部数字表示。假设我有十进制数字“1,5”。我想用两位精度和三个整数位和一个符号来写它。在二进制中,这将是“0001,10”,所以基本上是“000110”。我可以用手轻松做到这一点,但问题是我也有负面问题,而且在点之后它们没有有限的扩展(例如十进制的“1/3”)。 –

+0

[浮点到二进制]可能的重复(http://stackoverflow.com/questions/4838994/float-to-binary) – Hans

回答

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:] 
+0

它不适用于像'-1.3'这样的数字。 –