Если известно, что a и b являются неотрицательными целыми числами, последовательность (int) ((без знака) a + (без знака) b) действительно вернет отрицательное число при переполнении.
Предположим, что 4-битная (макс. Положительное целое число равно 7, а макс. Целое число без знака равно 15) система со следующими значениями:
a = 6
b = 4
a + b = 10 (overflow if performed with integers)
Если мы сделаем дополнение, используя беззнаковое преобразование, у нас будет:
int((unsigned)a + (unsigned)b) = (int) ((unsigned)(10)) = -6
Чтобы понять почему, мы можем быстро проверить двоичное дополнение:
a = 0110 ; b = 0100 - first bit is the sign bit for signed int.
0110 +
0100
------
1010
For unsigned int, 1010 = 10
. При том же представлении in signed int means -6
.
Таким образом, result
операции действительно < 0
.