我有公式:(短)(0xF800 |(N& 0x7ff))。在C / CPP / C#的帮助下,我改变了8位数字的符号(例如1202数字到-846)。在Python中,这个技巧不起作用。我如何得到相同的结果?
答案 0 :(得分:2)
Python中的整数具有无限长度。要设置负数,您需要设置最高位,但没有" top"使用Python - 你不能通过位操作来做到这一点。 可以做的是通过减法将正数转换为负数。
bits = 0xf800 | (N & 0x7ff)
if bits & 0x8000:
bits -= 0x10000
由于您已经知道最高位已设置,因此简化了:
bits = (0xf800 | (N & 0x7ff)) - 0x10000
答案 1 :(得分:0)
如果您想使用C(++)类型,则需要使用struct或ctypes模块
此方法使用struct将整数打包为字节字符串,然后将其解压缩为其他类型。
>>> import struct
>>> N = 1202
>>> struct.unpack('h', struct.pack('H',0xf800|(N & 0x7ff)))[0]
-846
此方法使用ctypes,其内部表示与C(++)中的内容相似
>>> from ctypes import c_short
>>> N = 1202
>>> c_short(0xf800|(N & 0x7ff)).value
-846
答案 2 :(得分:0)
也许有人需要:
从ctypes导入c_short C_short(0xF800 |(N& 0x7ff))。值