从Python的十六进制到一个补码

use*_*870 10 python bit-manipulation ones-complement

有没有一种简单的方法可以在python中生成一个补码?

例如,如果你取十六进制值0x9E,我需要将其转换为0x61.

我需要将二进制1换成0,将0换成1.感觉这应该很简单.

Mar*_*ers 28

只需使用XOR运算符^对0xFF:

>>> hex(0x9E ^ 0xFF)
'0x61'
Run Code Online (Sandbox Code Playgroud)

如果需要使用大于一个字节的值,可以根据值的int.bit_length()方法创建掩码:

>>> value = 0x9E
>>> mask = (1 << value.bit_length()) - 1
>>> hex(value ^ mask)
'0x61'
>>> value = 0x9E9E
>>> mask = (1 << value.bit_length()) - 1
>>> hex(value ^ mask)
'0x6161'
Run Code Online (Sandbox Code Playgroud)

  • @Kos:`~` 字面上返回`-(x+1)`,这在处理有符号值时非常有用。所以 `~0x9E` 是 `-159` 或 `-0x9f` 十六进制。对于无符号按位工作,不太好.. (2认同)