Representações numéricas assinadas
As representações de números assinados são usadas para resolver o problema de representar inteiros negativos em binários. O problema de tentar armazenar o sinal negativo (-) de um número binário é que não há mais estados com os quais se possa representar a atribuição negativa. Não é possível usar apenas 'off' para menos e 'on' para mais porque o computador não teria como saber se era um dígito ou um sinal.
Para superar este problema, os projetistas de computadores inventaram dois métodos para armazenar números binários negativos: o sinal e a magnitude e o complemento do 2. Estes produzem representações alternativas para números assinados.
Sinal e magnitude
O sinal e a Magnitude funcionam alterando o bit mais significativo (MSB - o primeiro dígito) para 1 se o número for negativo, e reduzindo o número em 1, por exemplo:
0000 0010 (2)
se tornará...
1000 0010 (-2)
Este método de armazenamento de números binários negativos não funciona porque:
- A aritmética binária não vai funcionar.
- Precisamos primeiro saber qual mecanismo de armazenamento o compilador de um determinado idioma utiliza.
1 do complemento
O complemento 1 funciona trocando 1s por 0s e o 0s por 1s, por exemplo:
0000 0010 (2)
se tornará...
1111 1101 (-2)
Muito parecido com o método do sinal e da magnitude, este é facilmente definido como um número negativo porque seu bit mais significativo é 1
2's complemento
O complemento 2 é uma maneira mais difícil de armazenar negativos. Há três passos para isso:
- Encontrar o número binário positivo (por exemplo 8base 10 = 0000 1000base 2).
- Troque o 1s por 0s e o 0s por 1s (por exemplo, 0000 1000base 2 torna-se 1111 0111base 2).
Isto é conhecido como "virar os pedaços", ou aplicar o NÃO lógico à representação da base 2 original.
- Adicionar 1 (ex. 1111 0111base 2 + 1base 2 = 1111 1000base 2).
Este método é apreciado porque:
- É como um sinal e magnitude; um número negativo começa com um 1 e um número positivo começa com um 0.
- A aritmética binária funcionará.
- Há apenas um valor para 0 (0000 0000base 2).