首页 文章

python中两个数字的补码

提问于
浏览
11

我编写的代码将包含所有16位长的负数和正数,MSB是符号,也就是二进制补码 . 这意味着我可以拥有的最小数字是 -32768 ,这是两个补码形式的 1000 0000 0000 0000 . 我能拥有的最大数字是 32767 ,即 0111 1111 1111 1111 .

我遇到的问题是python用相同的二进制表示法表示负数,正数只是在前面加一个减号,即 -16384 显示为 -0100 0000 0000 0000 我希望显示的数字如 -163841100 0000 0000 0000 .

我不太清楚这是如何编码的 . 这是我的代码 . 基本上,如果数字在180到359之间,那么它将是负数 . 我需要将其显示为两个恭维值 . 我没有关于如何显示它的任何代码,因为我真的不知道该怎么做 .

def calculatebearingActive(i):

    numTracks = trackQty_Active
    bearing = (((i)*360.0)/numTracks)
    if 0< bearing <=179:
        FC = (bearing/360.0)
        FC_scaled = FC/(2**(-16))
        return int(FC_scaled)

    elif 180<= bearing <=359:
        FC = -1*(360-bearing)/(360.0)
        FC_scaled = FC/(2**(-16))
        return int(FC_scaled)

    elif bearing ==360:
        FC = 0
        return FC

4 回答

  • -1

    如果你正在做类似的事情

    format(num, '016b')
    

    要将您的数字转换为二进制补码字符串表示,您需要在对其进行字符串化之前实际采用负数的二进制补码:

    format(num if num >= 0 else (1 << 16) + num, '016b')
    

    或采取它mod 65536

    format(num % (1 << 16), '016b')
    
  • 2

    值的两个补码是一个补码加一个 .

    您可以根据以下内容编写自己的转换函数:

    def to_binary(value):
        result = ''
        if value < 0:
            result = '-'
            value = ~value + 1
        result += bin(value)
        return result
    

    结果如下:

    >>> to_binary(10)
    '0b1010'
    >>> to_binary(-10)
    '-0b1010'
    

    编辑:要显示前面没有减号的位,您可以使用此功能:

    def to_twoscomplement(bits, value):
        if value < 0:
            value = ( 1<<bits ) + value
        formatstring = '{:0%ib}' % bits
        return formatstring.format(value)
    
    >>> to_twoscomplement(16, 3)
    '0000000000000011'
    >>> to_twoscomplement(16, -3)
    '1111111111111101'
    
  • 7

    如果您确实想使用16位存储数字,则可以使用struct .

    import struct
    
    >>> struct.pack('h', 32767)
    '\xff\x7f'
    >>> struct.pack('h', -32767)
    '\x01\x80'
    

    您可以使用 unpack 解压缩

    >>> a = struct.pack('h', 32767)
    >>> struct.unpack('H', a)
    32767
    
  • -1

    既然你没有't given any code examples, I can' t,那么's going on. Based on the numbers in your example, I don'认为你正在使用 bin(yourint) ,因为你're output doesn' t包含 0b . 也许你已经在你的例子中切掉了它 .

    如果要将二进制数据存储为字符串,则可以执行以下操作:

    def handle_negatives(binary_string):
            If binary_string < 0:
                binary_string = '1' + str(binary_string)[1:]
            Return binary_string
    

相关问题