Complemento para dois
Em computação, complemento para dois ou complemento de dois é um tipo de representação binária de números com sinal amplamente usada nas arquiteturas dos dispositivos computacionais modernos.
O complemento de dois de um número de N bits é definido como o complemento em relação a 2N. Para calcular o complemento de dois de um número, basta subtrair este número de 2N, que em binário é representado por um seguido de N zeros. Outro método é calcular o complemento de um e somar um ao valor.
O bit mais significativo (MSB) é o que informa o sinal do número. Se este dígito for o número é positivo, e se for é negativo.[1]
Os números são escritos da seguinte forma:
- Positivos: Sua magnitude é representada na sua forma binária direta, e um bit de sinal 0 é colocado na frente do MSB.
- (bit 0) + o número em binário.
- Exemplos: 0001 (+1), 0100 (+4) e 0111 (+7)
- Negativos: Sua magnitude é representada na forma de complemento a 2, e um bit de sinal 1 é colocado na frente do MSB.
- Pegamos o número em binário e "invertemos" (0100 invertendo têm-se 1011) e
- Somamos um ao valor "invertido" (1011 + 0001 = 1100).
Desta maneira, só existe uma representação para o número zero ().
As vantagens do uso do complemento de 2 é que existe somente um zero e que as regras para soma e subtração são as mesmas. A desvantagem é o fato de ser um código assimétrico, porque o número de representações negativas é maior que o número de representações positivas. Por exemplo, com oito bits em complemento para 2 podemos representar os números decimais de -128 a +127.[2]
Algoritmos para obtenção do complemento de 2
[editar | editar código-fonte]Para se obter o complemento de 2 de um número binário, a regra geral nos diz para subtrair cada algarismo de 2. Por causa da particularidade dos números binários (subtrair de 1 cada bit é o mesmo que inverter todos os bits - e é o mesmo que tirar o complemento de 1), para obter o C2 de um número obtemos primeiro o complemento de um (invertendo os bits) e depois somamos 1 ao resultado, já que (2-N) = (1-N)+1[3]
Existe outra maneira de usar o complemento a dois. Vamos supor que temos um número binário 101110, começando da direita para esquerda você vai repetindo o número (para a esquerda) até encontrar o número 1, depois que encontrá-lo repita-o e passe a inverter o restante. Continuado o nosso exemplo:
Número: 101110
- Passo 1 - 0 (o primeiro número da direita)
- Passo 2 - 10 (Aqui encontramos o primeiro 1, então vamos repetí-lo e continuar)
- Passo 3 - 010 (Invertemos o número 1 da terceira posição da direita para a esquerda)
- Passo 4 - 0010
- Passo 5 - 10010
- Passo 6 - 010010 (o resultado do complemento)
Outro número: 1101
- Passo 1 - 1 (O primeiro número da direita para a esquerda é o 1, então repetimos e passamos a inverter o restante)
- Passo 2 - 11
- Passo 3 - 011
- Passo 4 - 0011
Exemplos
[editar | editar código-fonte]Tabela exemplo para números binários (4 digitos) representados em complemento de 2:
Decimal | Binário s/ sinal | Binário (Compl. 2) |
---|---|---|
-8 | - | 1000 |
-7 | - | 1001 |
-6 | - | 1010 |
-5 | - | 1011 |
-4 | - | 1100 |
-3 | - | 1101 |
-2 | - | 1110 |
-1 | - | 1111 |
0 | 000 | 0000 |
1 | 001 | 0001 |
2 | 010 | 0010 |
3 | 011 | 0011 |
4 | 100 | 0100 |
5 | 101 | 0101 |
6 | 110 | 0110 |
7 | 111 | 0111 |
Note que com quatro dígitos (bits) não é possível representar o número 8 positivo, porém o número 8 negativo (-8) permanece. Assim conseguimos representar 16 valores com quatro bits (2^4)
Ver também
[editar | editar código-fonte]- ↑ Wakerly, John F. (1990). Digital Design: Principles and Practices (em inglês). [S.l.]: Prentice Hall
- ↑ «Two's Complement». Elsevier. 1977: 157–158. Consultado em 20 de dezembro de 2022
- ↑ Koren, Israel (8 de outubro de 2018). «Computer Arithmetic Algorithms». doi:10.1201/9781315275567. Consultado em 20 de dezembro de 2022