我编写的代码将包含所有16位长的负数和正数,MSB是符号,也就是二进制补码 . 这意味着我可以拥有的最小数字是 -32768 ,这是两个补码形式的 1000 0000 0000 0000
. 我能拥有的最大数字是 32767 ,即 0111 1111 1111 1111
.
我遇到的问题是python用相同的二进制表示法表示负数,正数只是在前面加一个减号,即 -16384 显示为 -0100 0000 0000 0000
我希望显示的数字如 -16384 是 1100 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 回答
如果你正在做类似的事情
要将您的数字转换为二进制补码字符串表示,您需要在对其进行字符串化之前实际采用负数的二进制补码:
或采取它mod
65536
:值的两个补码是一个补码加一个 .
您可以根据以下内容编写自己的转换函数:
结果如下:
编辑:要显示前面没有减号的位,您可以使用此功能:
如果您确实想使用16位存储数字,则可以使用struct .
您可以使用
unpack
解压缩既然你没有'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
. 也许你已经在你的例子中切掉了它 .如果要将二进制数据存储为字符串,则可以执行以下操作: