Ошибка в том, как вы создаете инвертированную маску.
Вы делаете это как строковую операцию и конвертируете строку обратно в целое число, используя int
. Вы забыли указать base=2
, и строка обрабатывается как десятичное число.
Правильный способ инвертировать 32-битное значение:
MASK32 = 2**32-1
invx = ~x & MASK32