在python中使用bit操作

时间:2015-09-22 22:27:35

标签: python bit valueconverter

我有公式:(短)(0xF800 |(N& 0x7ff))。在C / CPP / C#的帮助下,我改变了8位数字的符号(例如1202数字到-846)。在Python中,这个技巧不起作用。我如何得到相同的结果?

3 个答案:

答案 0 :(得分:2)

Python中的整数具有无限长度。要设置负数,您需要设置最高位,但没有" top"使用Python - 你不能通过位操作来做到这一点。 可以做的是通过减法将正数转换为负数。

bits = 0xf800 | (N & 0x7ff)
if bits & 0x8000:
    bits -= 0x10000

由于您已经知道最高位已设置,因此简化了:

bits = (0xf800 | (N & 0x7ff)) - 0x10000

答案 1 :(得分:0)

如果您想使用C(++)类型,则需要使用structctypes模块

此方法使用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))。值