Códigos binários, inversos e complementares

Códigos binários, complemento de um (inverso) e complemento de dois (calculadora criada por solicitação de usuário)

Esta calculadora online converte um número inteiro inserido em sua forma binária, assim como exibir seu código inverso e o complementar /743/

A seguir está a calculadora para essa tarefa. Ela aceita números inteiros positivos e negativos e resulta os códigos binários mencionados acima.

Abaixo da calculadora, como de costume, está a explicação da mesma.

Atualização: Recebi mensagens e acredito ser possível vque haja má-interpretação dos resultados da calculadora. Erro meu. A calculadora meramente aplicou o algoritmo descrito a qualquer número inserido. Agora, eu a modifiquei para evitar confusão. Ou seja, para números positivos ela mostra a representação binária do número (pois não há inversos ou complementares para positivo), e para números negativos mostra sua apresentação do positivo em códigos inversos e complementares.

PLANETCALC, Códigos binários, inversos e complementares

Códigos binários, inversos e complementares

Alcance
 
Código binário
 
Código inverso (complemento de um)
 
Código complementar (complemento de dois)
 

Então, aqui está um pouco de teoria

Código binário é a representação binária de um número inteiro não-sinalizado. Se estivermos falando de computadores, há um certo número de bits utilizado para representar o número. Então, o alcance total que pode ser representado por n-bits é 2^n

Código inverso ou complemento de um é simplesmente o código binário invertido de um número. Ou seja, todos os zeros se tornam um e todos os uns se tornam zeros.

Código complementar ou complemento de dois é o código inverso mais um.

Agora, o que fazemos com tudo isso?

Estes códigos foram inventados para tornar as operações de sinalização mais confortáveis (para máquinas). Já que eu sou uma pessoa gentil que gosta de aprender pelo exemplo, irei explicar esta afirmação com exemplos.

Vamos supor que tenhamos um computador com números binários de 4 bits. O alcance total que pode ser representado por 4-bits é 16 - 0,1,... 15
00 - 0000
...
15 - 1111

Porém, estes são números não-sinalizados e não possuem muita utilidade. Precisamos introduzir a sinalização. Então, metade do alcance está tomado por números positivos (oito, incluindo zero), e metade do alcance - por negativos (também oito). Note que a máquina considera zero um número positivo, ao contrário da matemática usual.

Então, nossos positivos são 0,...,7, e negativos são -1,...,-8.

Para distinguir números positivos dos negativos, nós sinalizamos o bit mais à esquerda como bit de sinalização. Zero no bit de sinalização informa que este é um número positivo e um - negativo.

Números positivos são representados pelo código binário plano
0 - 0000
1 - 0001
...
7 - 0111

Mas como números negativos podem ser representados? Aqui entra o código complementar.

Ou seja, -7 código é
binário 7 = 0111
inverso 7 = 1000
complementar 7 = 1001

Note que o binário 1001 é 9, o que diferencia de -7 em 16, ou 2^4. Ou, o que dá no mesmo, o código complementar "complementa" o código binário para 2^n, ex.: 7+9=16

Isso tem provado ser útil para computação da máquina - utilização do código complementar para representar negativos permite aos engenheiros utilizar o esquema de adição para ambas adição e subtração, então simplificando o design da ULA (unidade lógica e aritmética - parte do processador). Além disso, esta representação facilmente detecta um overflow, e então não há bits suficientes para representar o determinado número.

Alguns exemplos

7-3=4
0111 binário 7
1101 complemento de dois de 3
0100 resultado da adição 4

-1+7=6
1111 complemento de dois de 1
0111 binário 7
0110 resultado da adição 6

O overflow é detectado ao olhar os dois últimos transportes, incluindo o transporte além do bit mais à direita. Se os bits de transporte são 11 ou 00, não há overflow, se os bits de transporte são 01 ou 10, há overflow. E, se não há overflow, o transporte além do bit mais à direita pode seguramente ser ignorado.

Alguns exemplos com transportes e quinto bit (bit além do bit mais à direita)

7+1=8

00111 binário 7
00001 binário 1
01110 transportes
01000 resultado da adição 8 - overflow

Os dois últimos transportes são 01. Isso dá sinal de overflow

-7+7=0
00111 binário 7
01001 complemento de dois de 7
11110 transportes
10000 resultado da adição 16 - porém quinto bit pode ser ignorado, resultado real é 0

Os dois últimos transportes são 11. Não há overflow, então o resultado correto é zero.

A checagem de overflow pode ser apenas por XOR-ar os dois últimos bits de transporte.

Por causa destas propriedades convenientes, o complemento de dois é o método mais comum para representar números negativos em computadores.

OBS.: O código inverso, ou complemento de um, "complementa" o código binário para 2^n-1, (todos os uns). ele também pode ser usado para representar negativos, porém o esquema de adição deve empregar o transporte cíclico e é mais complexo. Além disso, o alcance, que pode ser representado por n bits, é reduzido em um, já que 1111 está sendo utilizado como invertido 0000 - zero negativo. Então, é menos conveniente.

URL copiado para a área de transferência
PLANETCALC, Códigos binários, inversos e complementares

Comentários