Seu navegador não oferece leitura em voz alta. Você pode ler o guia normalmente.
Quando a prova pergunta como um computador guarda o número menos cinco, a resposta é complemento de dois. É um assunto curto, de cálculo exato e quase sem margem para interpretação, o que o torna ideal para estudar: se você domina o procedimento, acerta todas. Este guia mostra o método de conversão nos dois sentidos, a fórmula da faixa de valores, a subtração feita por soma e o estouro (overflow), com todas as contas conferidas por programa.
Não há norma sobre o tema; é fundamento de arquitetura de computadores. Para as conversões básicas entre binário, decimal e hexadecimal, comece em sistema binário, bits e bytes.
A ideia
Com n bits, existem 2^n combinações. Para representar também números negativos, a representação em complemento de dois divide as combinações em duas metades: as que começam com bit 0 são números não negativos, e as que começam com bit 1 são negativos. O bit mais à esquerda é, por isso, o bit de sinal.
A faixa de valores
Com n bits, os números representáveis em complemento de dois vão de −2^(n−1) até 2^(n−1) − 1.
| Bits | Menor valor | Maior valor |
|---|---|---|
| 4 | −8 | 7 |
| 8 | −128 | 127 |
| 16 | −32.768 | 32.767 |
Note a assimetria: há um negativo a mais que positivos. O zero ocupa uma combinação (todos os bits zero), então sobra uma para o lado negativo. Sem sinal, com os mesmos 8 bits, a faixa seria de 0 a 255.
Como achar a representação de um número negativo
Método em dois passos para n bits:
- Escreva o valor absoluto em binário, completando com zeros à esquerda até n bits.
- Inverta todos os bits (complemento de um) e some 1 ao resultado.
Exemplo 1: −5 em 8 bits
- 5 em binário com 8 bits: 00000101.
- Inverter: 11111010.
- Somar 1: 11111011.
Resposta: −5 é 11111011. Conferência pela definição: na representação, o valor é −2^7 + a soma dos demais bits = −128 + (64 + 32 + 16 + 8 + 2 + 1) = −128 + 123 = −5.
Exemplo 2: outros valores em 8 bits
| Decimal | Binário em complemento de dois |
|---|---|
| 5 | 00000101 |
| −5 | 11111011 |
| 1 | 00000001 |
| −1 | 11111111 |
| 127 | 01111111 |
| −128 | 10000000 |
| 100 | 01100100 |
| −100 | 10011100 |
| 0 | 00000000 |
Veja a regularidade: −1 é sempre “tudo 1”, e o menor valor negativo é 1 seguido de zeros. O método de inverter e somar 1 funciona nos dois sentidos: aplicado a 11111011, devolve 00000101.
Como ler um número que começa com 1
Se o bit de sinal for 1, o número é negativo. Há dois caminhos equivalentes.
Caminho A (inverter e somar 1): inverta, some 1 e coloque o sinal de menos.
Caminho B (peso negativo): o bit mais à esquerda vale −2^(n−1), e os demais valem seus pesos positivos usuais.
Exemplo 3: ler 11010110 (8 bits)
- Caminho B: −128 + 64 + 16 + 4 + 2 = −128 + 86 = −42.
- Caminho A: invertendo, 00101001 (41); somando 1, 00101010 (42); portanto −42.
Os dois caminhos dão −42. Já 01101110, que começa com 0, é positivo: 64 + 32 + 8 + 4 + 2 = 110.
Subtrair somando
A grande vantagem do complemento de dois é que o mesmo circuito somador faz somas e subtrações. Para calcular 13 − 5, soma-se 13 com a representação de −5.
- 13 em 8 bits: 00001101.
- −5: 11111011.
- Soma: 00001101 + 11111011 = 1 00001000. O resultado tem 9 bits; o bit extra à esquerda (vai-um final) é descartado.
- Resultado em 8 bits: 00001000 = 8.
Confere: 13 − 5 = 8.
Estouro (overflow)
Ocorre quando o resultado verdadeiro não cabe na faixa. Em 8 bits, o maior valor é 127.
Exemplo 4: 100 + 50 em 8 bits
- 100 é 01100100 e 50 é 00110010.
- A soma é 10010110.
- Como o bit de sinal ficou 1, a leitura é negativa: −128 + 22 = −106.
Somando dois positivos, o resultado deu negativo: isso sinaliza overflow, pois 150 não cabe em 8 bits com sinal (o limite é 127). A regra para detectar: a soma de dois números de mesmo sinal que dá resultado de sinal diferente indica estouro. Somar números de sinais diferentes nunca causa overflow.
No sentido inverso, −100 − 50 é −150, menor que −128. O resultado em 8 bits seria 01101010 (+106), de sinal contrário, também sinal de estouro.
Extensão de sinal
Para passar um número com sinal de 8 para 16 bits sem mudar o valor, replica-se o bit de sinal à esquerda. O número −5 (11111011) em 16 bits fica 1111111111111011. Completar com zeros, que serve para números sem sinal, trocaria o valor.
Pegadinhas de prova
- Dizer que a faixa de 8 bits com sinal é de −127 a 127 (isso seria a representação sinal-magnitude, que tem dois zeros; o complemento de dois vai de −128 a 127).
- Calcular o complemento de dois sem completar os bits à esquerda antes de inverter.
- Ler 11111011 como 251: isso é a leitura sem sinal. Sem a informação do enunciado, a prova precisa dizer se o número tem sinal.
- Esquecer de descartar o vai-um final na soma.
- Achar que o overflow ocorre sempre que há vai-um final: o critério é o sinal do resultado (ou a coincidência dos dois últimos vai-um, conteúdo mais avançado).
Roteiro de resolução
- Identifique o número de bits e se o número tem sinal.
- Se o bit mais à esquerda for 0, leia como binário comum.
- Se for 1, use o caminho A ou B.
- Para converter um negativo em binário, escreva o módulo, inverta e some 1.
- Em somas, confira a faixa e o sinal do resultado.
Próximos passos
Siga para operações lógicas bit a bit e portas lógicas, hierarquia de memória e cache e RAID.
Fontes e atualização
Sem norma aplicável. Todas as representações e somas foram conferidas por programa. Confira no edital o programa de arquitetura de computadores e a notação adotada pela banca. Veja a metodologia do site.