Когда я использую calc, значение FFFFFFFFF418C5C1.
Ответ 1
Целочисленные числа Python могут расти сколь угодно большими. Чтобы вычислить необработанный two's-supplement так, как вам нужно, вам нужно указать желаемую ширину бита. Ваш пример показывает -199703103 в 64-битном дополнении, но он также может быть 32-разрядным или 128-битным, в результате чего в начале появляется другое число 0xf.
hex() этого не делает. В качестве альтернативы я предлагаю следующее:
Поскольку целые числа Python сколь угодно велики, вы должны замаскировать значения, чтобы ограничить преобразование в число бит, которое вы хотите для представления представления 2s.
Python отображает простой случай hex(-199703103) как отрицательное шестнадцатеричное значение (-0xbe73a3f), поскольку представление дополнения 2s будет иметь бесконечное число Fs перед ним для произвольного числа точности. Значение маски (2 ** 32-1 == 0xFFFFFFFF) ограничивает это: