Para un valor no negativo, el bit más significativo es 0 y los 15 bits restantes representan el valor directamente.
Para un valor negativo, el bit más significativo es 1 y los 15 bits restantes representan el valor absoluto menos uno complementado.
Ejemplo para -1:
00000000 00000001 (absolute value)
00000000 00000000 (minus one)
11111111 11111111 (complemented) --> (-1 in 2's complement)
El complemento de
2 no tiene sentido para los números sin firmar.
Para 16 bits sin firmar:
Min: 0x0000 --> 0
Max: 0xFFFF --> 65535
Para 16 bits firmados:
Min: 0x8000 --> -32768
Max: 0x7FFF --> 32767
El complemento de
2 se utiliza porque simplifica las sumas a nivel binario.
Toma estos ejemplos:
00000000 00001010 (10 decimal)
+11111111 11111001 (-7 decimal)
-------------------
1 00000000 00000011 (3 decimal) (the leftmost 1 is discarded because overflows the 16 bit sum)
00000000 00001100 (12 decimal)
+11111111 11101001 (-23 decimal)
-------------------
11111111 11110101 (-11 decimal)