It does not distinguish them.
But with the complement, the computation is the same :
Below, d
will be appended to decimal numbers, and b
to binary numbers.
Computations will be on 8 bits integers.
-1d + 1d = 1111 1111b + 1b = 1 0000 0000b
But since we overflowed (yep, that's 8 0
s and a 1
on a 8 bits integers), the result is equal to 0.
-2d + 1d = 1111 1110b + 1b = 1111 1111b = -1d
-1d + 2d = 1111 1111b + 10b = 1 0000 0001b (this overflows) = 1b = 1d
-1d + -1d = 1111 1111b + 1111 1111b = 1 1111 1110b (this overflows) = 1111 1110b = -2d
And if you consider these operations on unsigned (binary values will be unchanged) :
255d + 1d = 1111 1111b + 1b = 1 0000 0000b (this overflows) = 0d
254d + 1d = 1111 1110b + 1b = 1111 1111b = 255d
255d + 2d = 1111 1111b + 10b = 1 0000 0001b (this overflows) = 1b = 1d
255d + 255d = 1111 1111b + 1111 1111b = 1 1111 1110b (this overflows) = 1111 1110b = 2d
Unsigned versus signed is thus just a visual representation of unsigned, only used when displaying to a human :-)