Questão 3: Considere que a aritmética com sinal e números reais em um processador de 7 bits é realizada em complemento de 2 . Considere que em um dado momento, dois operandos assumam os valores binários \mathrm{A}=0010101 e \mathrm{B}=1100101, sendo que os dois bits menos significativos (LSB - Least Significant Bits) são reservados para representar a parte fracionária dos respectivos números.
a) Expresse o valor dos operandos A e B na base 10.
b) Mostre o desenvolvimento das operações abaixo na base 2 e os resultados na base 2 e na base 10:
c) Converta A e B e os resultados de “i”, “ii” e “iii” acima para números binários de 10 bits.
i) \quad A+B
ii) \quad A-B
iii) \quad 3^{*}(A+B)
Passo 1
O enunciado dá duas palavras binárias em complemento de 2 com 7 bits cada: \mathrm{A}=0010101 e \mathrm{B}=1100101. Os dois bits menos significativos (LSB) de cada palavra representam a parte fracionária — ou seja, estamos trabalhando com números em ponto fixo com 2 bits fracionários (fator de escala 2^2=4).\n
Perguntas:
(a) Expressar os valores de \mathrm{A} e \mathrm{B} na base 10.
(b) Fazer as operações (i) \mathrm{A}+\mathrm{B}, (ii) \mathrm{A}-\mathrm{B}, (iii) 3\cdot(\mathrm{A}+\mathrm{B}): mostrar desenvolvimento em base 2 e apresentar resultados em base 2 e base 10.
(c) Converter \mathrm{A}, \mathrm{B} e os resultados de (i),(ii),(iii) para representações binárias em complemento de 2 com 10 bits (mantendo 2 bits fracionários).\n
Dados relevantes listados explicitamente:
Representações iniciais: \mathrm{A}=0010101 e \mathrm{B}=1100101 (7 bits cada).
Complemento de 2, 2 bits fracionários \Rightarrow valor real = (valor inteiro em complemento de 2) /\;4.
Precisamos apresentar as contas em binário, interpretar sinais, e depois estender para 10 bits por extensão de sinal.
Passo 2
Explicação didática do que significa “complemento de 2” e “2 bits fracionários” (fórmulas e como aplicar):
Complemento de 2 (n bits): o bit mais significativo (MSB) indica o sinal; se MSB = 0, o número é não-negativo e o valor inteiro é a soma dos pesos das potências de 2 correspondentes; se MSB = 1, o número é negativo e seu valor inteiro é -\bigl(2^n - \text{valor\_unsigned}\bigr) ou, equivalente, obter magnitude fazendo inversão dos bits e somando 1.
Com 2 bits fracionários: o valor real é
\text{valor real}=\frac{\text{valor inteiro (do complemento de 2)}}{2^2}=\frac{\text{valor inteiro}}{4}.
Para converter uma palavra binária (7 bits) em valor real:
Se MSB = 0: calcule o valor inteiro normal e divida por 4.
Se MSB = 1: calcule magnitude = (inverter bits + 1) em inteiro; valor inteiro = -magnitude; depois divida por 4.
Passo 3
Converter \mathrm{A}=0010101 (7 bits) para decimal passo a passo:
Resumo (resposta da letra (a)) — já com interpretação: \mathrm{A}=5{,}25 e \mathrm{B}=-6{,}75.
(Guardamos esses valores para conferir as operações em seguida.)
Passo 6
Preparação para fazer as operações em binário: regra prática
Soma/subtração em complemento de 2: basta somar bit a bit (com carry), ignorar carry final que ultrapassar o tamanho fixo, o resultado já estará em complemento de 2 correto (se não houve overflow saturante).
Subtração \mathrm{A}-\mathrm{B} pode ser feita como \mathrm{A} + (\text{complemento de 2 de }\mathrm{B}\text{ com sinal trocado}), mas aqui é mais direto usar a interpretação inteira que já fizemos (mas também executarei soma em binário para mostrar como fazer na prova).
Multiplicação por constantes simples: multiplicar por 2 é deslocamento à esquerda por 1 (shift left), multiplicar por 3 = multiplicar por 2 e somar o original: 3x = 2x + x. Em ponto fixo o deslocamento muda a posição da vírgula implicitamente (mas, com 2 bits fracionários, shift left por 1 equivale a multiplicar o inteiro subjacente por 2, mantendo o mesmo número de bits fracionários).
0+1=1 (mais o carry que estava gerado é descartado se passar do MSB).
Executando corretamente (mostrando a soma tradicional):
0010101 + 1100101 = 1111010.
Interpretação de 1111010 (7 bits, MSB=1 \Rightarrow negativo):
Invertendo: 0000101. Somando 1: 0000110 que é 6.
Portanto o valor inteiro é -6 e o valor real é
\text{A}+\text{B} = \frac{-6}{4} = -1{,}5.
Passo 8
Operação (ii) \mathrm{A}-\mathrm{B}. Vou mostrar como soma usando o positivo de -\mathrm{B} (isto é, somar |\mathrm{B}| porque \mathrm{B} é negativo):
Já encontramos que \mathrm{B}=-27, então -\mathrm{B}=+27 tem representação binária (7 bits) 0011011 (vimos isso ao converter \mathrm{B}).
Somamos em binário:
Observação de conferência rápida pela aritmética inteira: 21 - (-27) = 48 → coerente.
Passo 9
Operação (iii) 3\cdot(\mathrm{A}+\mathrm{B}). Primeiro já temos \mathrm{A}+\mathrm{B} em 7 bits: 1111010 que corresponde ao inteiro -6.
Multiplicar por 3 dá inteiro -18.
Método em binário usando shifts e soma:
2\cdot(\mathrm{A}+\mathrm{B}) é deslocamento à esquerda por 1 bit (no mesmo formato de 7 bits), isto é:
1111010 \xrightarrow{\text{shift left 1}} 1110100.
(Nota: o MSB descartado é o carry de overflow; aqui não houve overflow final incorreto porque o resultado -12 está na faixa.)
2. Somamos 2(\mathrm{A}+\mathrm{B}) com (\mathrm{A}+\mathrm{B}):
(i) 21 + (-27) = -6\Rightarrow real -1{,}5 — bate com o passo 7.
(ii) 21 - (-27) = 48\Rightarrow real 12{,}0 — bate com passo 8.
(iii) 3\cdot(-6) = -18\Rightarrow real -4{,}5 — bate com passo 9.
Tudo consistente.
Passo 11
Conversão para 10 bits (extensão de sinal): regra: replicar o bit de sinal (MSB) para os 3 bits extras à esquerda. Mantemos 2 bits fracionários (mesma escala).
Para números com MSB = 0 (positivos) preenchemos com zeros à esquerda.
Para números com MSB = 1 (negativos) preenchemos com uns à esquerda.