В дополнении n-бит два биты имеют значение:
бит 0 = 2 0
бит 1 = 2 1
бит n-2 = 2 n-2
бит n-1 = -2 n-1
Но бит n-1 имеетзначение 2 n-1 , если оно не подписано, поэтому число слишком велико: 2 n .Вычтите 2 n , если установлен бит n-1:
>>> def twos_complement(hexstr,bits):
... value = int(hexstr,16)
... if value & (1 << (bits-1)):
... value -= 1 << bits
... return value
...
>>> twos_complement('FFFE',16)
-2
>>> twos_complement('7FFF',16)
32767
>>> twos_complement('7F',8)
127
>>> twos_complement('FF',8)
-1