Это часть того, что замечательно в представлении дополнения 2. Процессор не знает и не заботится о том, что число подписано или не подписано, операции одинаковы. В обоих случаях расчет верен. Только то, как двоичное число интерпретируется после факта, при печати, имеет значение (могут быть и другие случаи, например, с операторами сравнения)
-10 in 32BIT binary is FFFFFFF6
42 IN 32bit BINARY is 0000002A
Сложив их вместе, для процессора не имеет значения, если они подписаны или не подписаны, результат: 100000020. В 32-битном случае 1 в начале будет помещен в регистр переполнения, а в C ++ просто исчезает , В результате вы получите 0x20, то есть 32.
В первом случае, это в основном то же самое:
-42 in 32BIT binary is FFFFFFD6
10 IN 32bit binary is 0000000A
Сложите их вместе и получите FFFFFFE0
FFFFFFE0 в виде целого числа со знаком - -32 (десятичное число). Расчет верен! Но, поскольку он печатается как неподписанный, он отображается как 4294967264. Речь идет о интерпретации результата.