Я использую следующий фрагмент:
# sign extend b low bits in x
# from "Bit Twiddling Hacks"
def SIGNEXT(x, b):
m = 1 << (b - 1)
x = x & ((1 << b) - 1)
return (x ^ m) - m
В вашем случае b будет 8. Вы, вероятно, можете пересчитать маски для небольшого ускорения.
Ссылочный хак можно найти здесь .