-2

Python の 10 進数の浮動小数点数を 2 の補数の 10 進数の 2 進数に変換したいと考えています。たとえば、2 の補数 10 進数 2.6 (8 ビット) の 1.5 は 0b011000 になります。

私のためにこれを行うことができるモジュールはありますか?

4

3 に答える 3

1

あなたが説明していることは、10進数とはまったく関係ありません。float を固定小数点バイナリ表現に変換したい。これを行うには、float に倍率を掛けて整数にキャストし、Python の組み込みの文字列書式設定ツールを使用して文字列表現を取得します。

def float_to_binary(float_):
    # Turns the provided floating-point number into a fixed-point
    # binary representation with 2 bits for the integer component and
    # 6 bits for the fractional component.

    temp = float_ * 2**6  # Scale the number up.
    temp = int(temp)     # Turn it into an integer.
    # If you want -1 to display as 0b11000000, include this part:
    # if temp < 0:
    #     temp += 2**8

    # The 0 means "pad the number with zeros".
    # The 8 means to pad to a width of 8 characters.
    # The b means to use binary.
    return '{:08b}'.format(temp)
于 2013-07-15T04:37:27.547 に答える
0

まあ、何も見つからなかったので、コードを書いてテストしました。うまくいくはずです...

def floatToTwosComplementDecimal(intBits,decBits,number):
    if decBits == 0:
        mx = pow(2,intBits-1) - 1 # maximum number
    else:
        mx = pow(2,intBits-1) - pow(2,-1*decBits) # maximum number
    mn = -1*pow(2,intBits-1) # minimum number
    if number > mx:
        print "number:" + str(number) + " has been truncated to: " + str(mx)
        number = mx
    elif number < mn:
        print "number:" + str(number) + " has been truncated to: " + str(mn)
        number = mn
    n = []
    m = 0
    if number < 0:
        n.append(1)
        m = -1*pow(2,intBits-1)
    else:
        n.append(0)
        m = 0
    for i in reversed(range(intBits-1)):
        m1 = m + pow(2,i)
        if number < m1:
            n.append(0)
        else:
            n.append(1)
            m = m1
    for i in range(1,decBits+1):
        m1 = m + pow(2,-1*i)
        if number < m1:
            n.append(0)
        else:
            n.append(1)
            m = m1
    return string.join([str(i) for i in n], '')

def twosComplementDecimalToFloat(intBits,decBits,binString):
    n = 0.0
    if binString[0] == "1":
        n = -1*pow(2,intBits-1)
    for i in range(intBits-1):
        n += int(binString[intBits-1-i])*pow(2,i)
    for i in range(1,decBits+1):
        n += int(binString[intBits-1+i])*pow(2,-1*i)
    return n
于 2013-07-10T23:28:33.947 に答える