python中两个数字的补码

use*_*406 11 python twos-complement

我编写的代码将包含所有16位长的负数和正数,MSB是符号,也就是二进制补码.这意味着我可以拥有的最小数字是-32768,它是1000 0000 0000 0000二进制补码形式.我可以有最大数量是327670111 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
Run Code Online (Sandbox Code Playgroud)

use*_*ica 8

如果你正在做类似的事情

format(num, '016b')
Run Code Online (Sandbox Code Playgroud)

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

format(num if num >= 0 else (1 << 16) + num, '016b')
Run Code Online (Sandbox Code Playgroud)

或者拿它mod 65536:

format(num % (1 << 16), '016b')
Run Code Online (Sandbox Code Playgroud)

  • 您也可以使用位掩码执行`format(num&0xffff,'016b')`. (2认同)