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:
  1. (a) Expressar os valores de \mathrm{A} e \mathrm{B} na base 10.
  2. (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.
  3. (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:
    1. Se MSB = 0: calcule o valor inteiro normal e divida por 4.
    2. 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:
  • MSB = 0 \Rightarrow número positivo.
  • Valor inteiro (peso dos bits 2^6,2^5,\dots,2^0):
\begin{aligned} \text{valor\_int} &= 0\cdot 2^6 + 0\cdot 2^5 + 1\cdot 2^4 + 0\cdot 2^3 + 1\cdot 2^2 + 0\cdot 2^1 + 1\cdot 2^0\\\ &= 16 + 4 + 1 = 21. \end{aligned}
  • Valor real com 2 bits fracionários:
\text{A}=\frac{21}{4}=5{,}25.

Passo 4

Converter \mathrm{B}=1100101 (7 bits) para decimal passo a passo:
  • MSB = 1 \Rightarrow número negativo. Encontramos a magnitude por complemento de 2 invertendo e somando 1.
  • Inversão de bits de \mathrm{B}: 1100101 \xrightarrow{\text{inverter}} 0011010.
  • Somar 1: 0011010 + 1 = 0011011.
  • Converter 0011011 para inteiro:
\text{magnitude} = 0\cdot2^6 + 0\cdot2^5 + 1\cdot2^4 + 1\cdot2^3 + 0\cdot2^2 + 1\cdot2^1 + 1\cdot2^0 = 16+8+2+1=27.
  • Valor inteiro de \mathrm{B} = -27. Valor real:
\text{B}=\frac{-27}{4}=-6{,}75.

Passo 5

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).

Passo 7

Operação (i) \mathrm{A}+\mathrm{B} — soma binária passo a passo (7 bits):
\begin{array}{c} \phantom{+}0010101\\\\ +\,\phantom{0}1100101\\hline \end{array}
Somando bit a bit (LSB para MSB) com os carries:
  • 1+1=0 carregando 1,
  • 0+0+1(\text{carry})=1 carry 0,
  • 1+1=0 carry 1,
  • 0+0+1=1 carry 0,
  • 1+1=0 carry 1,
  • 0+1+1=0 carry 1,
  • 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:
\begin{array}{c} \phantom{+}0010101\\\\ +\,\phantom{0}0011011\\hline \end{array}
Soma:
0010101 + 0011011 = 0110000.
Interpretação: 0110000 tem MSB = 0 (positivo). Valor inteiro:
0\cdot2^6 +1\cdot2^5 +1\cdot2^4 +0\cdot2^3 +0\cdot2^2 +0\cdot2^1 +0\cdot2^0 = 32 + 16 = 48.
Valor real:
\mathrm{A}-\mathrm{B} = \frac{48}{4} = 12{,}0.
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:
  1. 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}):
\begin{array}{c} \phantom{+}1111010\\\\ +\,\phantom{0}1110100\\hline \end{array}
Somando:
1111010 + 1110100 = 1101110 \quad(\text{7 bits, carry final descartado}).
Interpretação de 1101110:
  • MSB = 1 (negativo). Inverter: 0010001. Somar 1: 0010010 que é 18.
  • Valor inteiro = -18.
  • Valor real:
3\cdot(\mathrm{A}+\mathrm{B}) = \frac{-18}{4} = -4{,}5.

Passo 10

Checagens rápidas de consistência (contas inteiras):
  • \mathrm{A} inteiro = 21, \mathrm{B} inteiro = -27.
  • (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.
Aplicando isso:
  • \mathrm{A}=0010101 (7 bits, sinal 0) \Rightarrow 10 bits: 0000010101.
  • \mathrm{B}=1100101 (7 bits, sinal 1) \Rightarrow 10 bits: 1111100101.
  • (i) \mathrm{A}+\mathrm{B}=1111010 \Rightarrow 10 bits: 1111111010.
  • (ii) \mathrm{A}-\mathrm{B}=0110000 \Rightarrow 10 bits: 0000110000.
  • (iii) 3\cdot(\mathrm{A}+\mathrm{B})=1101110 \Rightarrow 10 bits: 1111101110.
Cada uma dessas extensões preserva o valor numérico (por exemplo, 0000010101 ainda representa inteiro 21, etc.). Terminei a conversão pedida.

Resposta

(a) \mathrm{A}=5{,}25,\; \mathrm{B}=-6{,}75
(b)
(i) \mathrm{A}+\mathrm{B}=0010101 + 1100101 = 1111010 (binário, 7 bits) \Rightarrow -6 inteiro \Rightarrow -1{,}5 (decimal);
(ii) \mathrm{A}-\mathrm{B}=0010101 + 0011011 = 0110000 (binário, 7 bits) \Rightarrow 48 inteiro \Rightarrow 12{,}0 (decimal);
(iii) 3\cdot(\mathrm{A}+\mathrm{B})=1111010\cdot3 = 1101110 (binário, 7 bits) \Rightarrow -18 inteiro \Rightarrow -4{,}5 (decimal).
(c) Conversões para 10 bits (extensão de sinal):
\mathrm{A}=0000010101
\mathrm{B}=1111100101
(i) \mathrm{A}+\mathrm{B}=1111111010
(ii) \mathrm{A}-\mathrm{B}=0000110000
(iii) 3\cdot(\mathrm{A}+\mathrm{B})=1111101110

Exercícios relacionados