Eu sei que tem algo a ver com o complemento de 2 e a adição de 1, mas eu realmente não entendo como você pode codificar mais um número com a mesma quantidade de bits quando se trata de números negativos.
Eu sei que tem algo a ver com o complemento de 2 e a adição de 1, mas eu realmente não entendo como você pode codificar mais um número com a mesma quantidade de bits quando se trata de números negativos.
Respostas:
Pense nisso nesses termos. Pegue um número de 2 bits com um sinal anterior:
000 = 0
001 = 1
010 = 2
011 = 3
Agora vamos ter alguns pontos negativos:
111 = -1
110 = -2
101 = -3
Espere, nós também temos
100 ...
Tem que ser negativo, porque o bit de sinal é 1. Portanto, logicamente, deve ser -4.
(Editar: Como o WorldEngineer aponta corretamente , nem todos os sistemas de numeração funcionam dessa maneira - mas os que você está perguntando).
Porque não há duas classes de números no intervalo inteiro, mas três: números negativos, zero e números positivos. O zero precisa ocupar um espaço (seria impraticável não poder representar zero ...); portanto, a classe positiva ou a negativa tem que abrir mão de um espaço. O fato de que geralmente é o intervalo positivo que deve fazer esse sacrifício é, em certa medida, arbitrário, mas no nível de manipulação de bits, há algumas coisas que essa decisão torna mais conveniente.
Existem basicamente três maneiras de representar números inteiros assinados em binário: complemento de 2, complemento de 1 e magnitude de sinal. (A Biquinary seguiu o caminho do Pássaro Dodo há muito tempo.)
O complemento 1 e a magnitude do sinal têm dois valores zero, +0 e -0, cada um com uma representação única. O complemento 2 tem apenas um valor zero e uma representação.
Agora, um campo de N bits pode codificar valores de 2 ^ N. Subtraia um no complemento de 2 e você tem 2 ^ N-1 = 2 ^ (N-1) + 2 ^ (N-1) + 1. Como a representação para zero é todos os bits zero, e um sinal + é zero, haverá mais uma representação diferente de zero possível com o bit de sinal definido como 1.
Essa é uma maneira muito longa de dizer que o complemento de 2 representa valores no intervalo - (2 ^ (N-1)) .. + (2 ^ (N-1) - 1).
O complemento de 1 na verdade tem uma vantagem sobre o complemento de 2 se você estiver executando cálculos de processamento de sinal digital inteiro. As operações de complemento de 1 truncam inerentemente para zero. O complemento de 2 trunca em direção ao infinito. Eu aprendi este da maneira DURA ...