EA-869 - Dúvidas Frequentes

EA-869 - Dúvidas Frequentes

Capítulo VIII (01.6.98), 01/2006, 01/2008


(Ting - 2s97, Léo - 1s2006)
Como se transforma um número representado na base decimal para a base não-decimal b?

Dado um número inteiro, na base decimal, contendo n dígitos. Qual deve ser a quantidade mínima de bits, m, para representá-lo na base binária?

O que é uma representação em complemento de b e em complemento de (b-1) de um número na base b?

Como são codificados os números sem sinal em formato binário?

Por que a representação octal é bem menos utilizada que a representação hexadecimal?

Quais são as vantagens e desvantagens do código BCD?

Como podem ser representados os números com sinal numa base b?

Seja 11100010 o conteúdo de um registrador de 8 bits. O que este código binário representa, considerando que ele seja:
  1. uma representação sem sinal em código binário?
  2. uma representação com sinal e magnitude em código binário?
  3. uma representação com sinal e complemento de 1 em código binário?
  4. uma representação com sinal e complemento de 2 em código binário?

Por que a representação em complemento de 2 é considerada a mais adequada para implementação de operações aritméticas em circuitos digitais?

A adição (ou subtração) em ponto flutuante se faz do mesmo modo que em ponto fixo?

Explicite todos os números que podem ser representados exatamente considerando a representação numérica de ponto flutuante normalizado com mantissa de 3 bits (codificada em sinal+magnitude) e expoente de 3 bits (codificado em complemento de 2). Suponha ainda que a base (implícita) seja 2.

Quais são os caracteres representáveis pelo código ASCII (American Standard Code for Information Interchange)?

Seja 01100010 o conteúdo de um registrador de 8 bits. O que este código binário representa, considerando que ele seja:
  1. um código hexadecimal?
  2. um código octal?
  3. um código BCD?
  4. uma representação em ponto fixo (bit mais significativo (7) = sinal, bits 6-3 = parte inteira e bits 2-0 = parte fracionária, base = 2)?
  5. uma representação em ponto flutuante (bit mais significativo (7) = sinal, bits 6-3 = mantissa e bits 2-0 = expoente em complemento de 2, base = 2)?
  6. um código ASCII (7 bits menos significativos)?


Como se transforma um número representado na base decimal para a base não-decimal b?

    Vimos na Seção VIII.1 do livro-texto que um número representado numa base não-decimal, com n dígitos à esquerda da vírgula e m dígitos à direita, pode ser transformado para a base decimal pela equação:
    (N)10 = dígiton . bn +dígito(n-1) . b(n-1) + ... + dígito1 . b1 + dígito0 . b0 + dígito-1 . b-1 + ... + dígito-m . b-m .
    Para a transformação inversa, isto é da base decimal para uma não-decimal, podemos seguir o seguinte algoritmo:
    1. Separar o número em parte inteira e parte fracionária;
    2. Dividir a parte inteira I por b. Se o quociente for zero, páre. Senão, substitua I pelo quociente e continue a divisão sucessivamente. Os restos em cada divisão são concatenados, na sequência de dígito menos significativo para o mais significativo, para formar a parte inteira do resultado.
    3. Multiplicar a parte fracionária F por b. Se a parte fracionária do produto for nula, páre. Senão substitua F pela parte fracionária do produto e continue a multiplicação sucessivamente. As partes inteiras do produto em cada multiplicação são concatenadas, na ordem de dígito mais próximo da vírgula para o mais distante, para formar a parte fracionária do resultado.
    Por exemplo, o número (241,1640625)10 é transformado em (F1,2A)16 pelo seguinte procedimento:
    241 0.1640625
    15 1 1 x 16
    0 15 F 2.6250000 2
    x 16
    10.000000 A
    e o número (15,625)10 é transformado em (1111,101)2 pelo seguinte procedimento:
    15 0.625
    7 1 1 x 2
    3 1 1 1.250 1
    1 1 1 x 2
    0 1 1 0.500 0
    x 2
    1.000 1
    Vale ressaltar aqui a observação feita na Seção VIII.3.2 do livro-texto de que a transformação de números entre a base decimal e bases não-decimais nem sempre permite uma representação exata após a transformação.

Dado um número inteiro, na base decimal, contendo n dígitos. Qual deve ser a quantidade mínima de bits, m, para representá-lo na base binária?

    O valor m deve ser tal que satisfaça a seguinte desigualdade:
    2m -  1  >=   10n -  1
    <=>   2m >=   10n
    <=>   log102m >= n
    <=>   m.log102 >= n
    <=>   0,30103.m >= n
    <=>   m >= 3,3219.n.

O que é uma representação em complemento de b e em complemento de (b-1) de um número na base b?

    Dado um número N na base b, com n dígitos à esquerda da vírgula e m dígitos à direita, o complemento de (b-1) de N é, por definição,
    bn - N - b-m
    e o complemento de b de N é, por definição,
    bn - N.
    Note que o complemento de b de N pode ser obtido adicionando b-m ao complemento de (b-1) de N, uma vez que
    bn - N = [bn - N - b-m] + b-m
    Exemplos:
    Base b Número Complemento de b-1 Complemento de b
    2 011.011 100.100 100.101
    8 05467.0 72310.7 72311.0
    10 05467.00 94532.99 94533.00
    16 0CD.31 F32.CE F32.CF
    Vale a pena ressaltar ainda que o complemento numérico do complemento de um número N é o próprio N, pois
    bn - (bn - N - b-m) - b-m = N
    e
    bn - (bn - N) = N.

Como são codificados os números sem sinal em formato binário?

    A forma mais simples para codificar, em formato binário, os números em qualquer base é associar a cada dígito um grupo de bits suficientes para representar cada dígito, ou seja,
    Base Número de bits
    2 (Binária) 1
    8 (Octal) 3
    10 (Decimal) 4
    16 (Hexadecimal) 4
    Se representarmos cada dígito por seu valor binário correspondente, vimos na Seção VIII.1 do livro-texto que a transformação de números entre a base binária e a base octal (hexadecimal) é imediata, bastando agrupar os dígitos binários de 3 em 3 (4 em 4).
    Dada uma sequência de dígitos binários 100011111100 que representa um número na base binária, e número nas bases octal e hexadecimal é representado, respectivamente, por (4374)8 e (8FC)16, como mostram as seguintes tabelas:
    100 011 111 100
    4 3 7 4
    1000 1111 1100
    8 F C
    Em outras palavras, nesta forma de codificação, os formatos binários de um número b na base binária, de um número o na base octal e de um número h na base hexadecimal são extamente os mesmos, se e somente se b, o e h denotam o mesmo valor numérico.
    A forma mais natural para codificar cada dígito de um número na base decimal por 4 bits é também representar cada dígito pelo seu valor binário correspondente. Esta forma de codificação, apresentada na Seção VIII.1 do livro-texto, é conhecida como binary-coded decimal (código BCD). Outra forma de codificação, conhecida como código de Gray, é aquela que modifica somente o valor de 1 bit entre dois dígitos decimais subsequentes, conforme a tabela abaixo:
    Valor Decimal Binário Natural Código de Gray
    0 0000 0010
    1 0001 0110
    2 0010 0111
    3 0011 0101
    4 0100 0100
    5 0101 1100
    6 0110 1101
    7 0111 1111
    8 1000 1110
    9 1001 1010

Por que a representação octal é bem menos utilizada que a representação hexadecimal?

    Porque as máquinas são comumente projetadas para operar os bits individualmente, ou em "grupos" de 4, 8, 16, 32 ou 64 bits.

Quais são as vantagens e desvantagens do código BCD?

    Embora o sistema binário seja o sistema mais apropriado para computadores, códigos para sistemas decimais e operações para estes códigos têm sido amplamente estudados devido à nossa familiaridade com este sistema numérico. Entretanto, códigos decimais requerem um hardware mais complexo para implementar as operações aritméticas e apresentam uma taxa menor de aproveitamento do espaço de memória (4 bits são utilizados para codificar 10 distintos dígitos decimais!)

Como podem ser representados os números com sinal numa base b?

    Existem basicamente três tipos de representação de um número N numa base b:
    1. sinal e magnitude de N;
    2. sinal e complemento de b;
    3. sinal e complemento de (b-1).
    Como vimos na Seção VIII.1 do livro-texto, os três tipos de representação só diferem na codificação de números negativos. Na representação por sinal e magnitude, a representação de um número negativo é obtida complementando somente o dígito mais significativo (o de sinal) da representação do número positivo correspondente; enquanto na representação por complemento numérico, a representação de um número negativo corresponde ao seu complemento de b ou de (b-1), como mostram os seguintes exemplos:
    Base (b) Sinal e Magnitude Sinal e Complemento de b Sinal e Complemento de b-1
    16 0 F1.A7 0 F1.A7 0 F1.A7
    16 F F1.A7 F 0E.59 F 0E.58
    10 0 14.37 0 14.37 0 14.37
    10 9 14.37 9 85.63 9 85.62
    8 0 14.37 0 14.37 0 14.37
    8 7 14.37 7 63.41 7 63.40
    2 0 1110.011 0 1110.011 1 1110.011
    2 1 1110.011 1 0001.101 1 0001.100

Seja 11010010 o conteúdo de um registrador de 8 bits. O que este código binário representa, considerando que ele seja:

  1. uma representação sem sinal em código binário?
  2. uma representação com sinal e magnitude em código binário?
  3. uma representação com sinal e complemento de 1 em código binário?
  4. uma representação com sinal e complemento de 2 em código binário?

  1. Representação sem sinal em código binário: 27+26+24+21 = 210.
  2. Representação com sinal e magnitude:-(26+24+21) = -82.
  3. Representação com sinal e complemento de 1: Descartando o bit de sinal (1010010) é o complemento de 1 de (0101101)2 = (45)10.
  4. Representação com sinal e complemento de 2: Descartando o bit de sinal (1010010) - 1 = (1010001) é o complemento de 1 de (0101110)2 = (46)10.

Por que a representação em complemento de 2 é considerada a mais adequada para implementação de operações aritméticas em circuitos digitais?

    A representação em complemento numérico permite tratar uniformemente as operações aritméticas entre os números positivos e negativos. Vimos, por exemplo, no faq2 que, para representações em complemento de 2, uma subtração entre dois números pode ser reduzida às operações de soma e de complemento dos dígitos.
    O sinal do resultado da soma entre dois números em complemento de dois é também derivado de forma bastante natural, como exemplificam as duas somas seguintes:
    +8 0 00001000 +8 0 00001000
    +14 0 00001110 -14 1 11110010
    ---- ---------- --- ----------
    +22 0 00010110 -6 1 11111010
    Podemos ainda utilizar o mesmo circuito de adição para subtrair dois números com sinal lembrando que:
    (sA) - (+B) = (sA) + (-B)
    (sA) - (-B) = (sA) + (+B),
    onde s denota o sinal negativo ou positivo.
    Além disso, a multiplicação entre dois números com sinal pode ser, com uso do algoritmo de Booth, uniformemente tratada para valores positivos e negativos. Este algoritmo se baseia no fato de que o multiplicador é decomponível em soma de números, com sinal e múltiplos de 2 (isto é, 2i ou -2i, sendo i o i-ésimo dígito do multiplicador) e o resultado da multiplicação ser a soma das multiplicações parciais entre o multiplicando e cada um desses números. A escolha por (2i) ou (-2i) depende da transição entre os dígitos ai e a(i-1) no multiplicador ao varrê-lo da direita para a esquerda. Considerando sempre a-1 = 0, temos:
    aia(i-1) Multiplicador Parcial
    00 0
    01 2i
    10 -2i
    11 0

    Para exemplificar faremos a multiplicação de dois números, +4 e (-5), representados em complemento de 2.
    +4 0100 multiplicando
    x  -5 x  1011 multiplicador
    ---- -------
    11111100 padrão 10 <<<<<< (-20 x 0100)
    0000000 padrão 11 <<<<<< (00000000)
    000100 padrão 01 <<<<<< (+22 x 0100)
    11100 padrão 10 <<<<<< (-23 x 0100)
    -------
    11101100 resultado (-20)
    Finalmente, a divisão entre dois números com sinal pode ser sempre reduzida a uma sequência sucessiva de comparações, deslocamentos e subtrações. E a implementação dessas operações em circuitos digitais é relativamente simples para representações em complemento de 2.
    Vale ressaltar aqui que os algoritmos apresentados são aplicáveis para representações em ponto fixo.

A adição (ou subtração) em ponto flutuante se faz do mesmo modo que em ponto fixo?

    Não. Em representação que utiliza ponto flutuante, não é possível realizar a adição (ou subtração) com exponentes diferentes. Os seguintes passos devem ser adotados:
    1. identificar o número com o menor expoente;
    2. fazer o menor expoente igual ao maior expoente pela divisão da mantissa pelo mesmo fator utilizado para aumentar o expoente;
    3. adicionar (ou subtrair) as mantissas; e
    4. se necessário, normalizar o resultado.

Explicite todos os números que podem ser representados exatamente considerando a representação numérica de ponto flutuante normalizado com mantissa de 3 bits (codificada em sinal+magnitude) e expoente de 3 bits (codificado em complemento de 2). Suponha ainda que a base (implícita) seja 2.

    Representação:

    Combinações possíveis para a mantissa:

    0,10 0,11 1,10 1,11
    +0,5 +0,75 -0,5 -0,75

    Combinações possíveis para o expoente

    000 001 010 011 111 110 101 100
    0 +1 +2 +3 -1 -2 -3 -4

    Números representáveis (como são simétricos só foram representados os pontos na semi-reta positiva:

    Observe que
    • como são 5 bits, somente 32 números da reta real são exatamente representáveis;
    • o espaçamento entre os números representáveis varia ao longo da reta real. Quanto menor for o expoente (mais próximos forem os números de zero), menor é o espaçamento. Compare, por exemplo, a distância entre 0.75 x 23 e 0.5 x 23 com a distância entre 0.75 x 2-3 e 0.5 x 2-3 na reta real;
    • a precisão na faixa be, onde b e e são respectivamente base e expoente, é a mesma (isto é, o espaçamento entre os números, de mesmo sinal e com o mesmo valor de expoente, é o mesmo). Acrescente um bit à mantissa e compare, por exemplo, a distância entre 0.75 x 22 (0110010) e 0.625 x 22 (0101010) e a distância entre 0.5 x 22 (0100010) e 0.625 x 22 (0101010);
    • a precisão depende da faixa de valores representáveis pela mantissa (número de bits no campo de mantissa). Quanto maior for a faixa de valores da mantissa, maior é o número de pontos representáveis no intervalo [0.5,1.0)xbe, onde b e e são, respectivamente, base e expoente; (Tente passar um bit do campo de expoente para o campo de mantissa ...)
    • a faixa de representação depende da faixa de valores representáveis pelo expoente (número de bits no campo de expoente). Quanto maior for a faixa de valores do expoente, mais espalhados estariam os 32 números exatamente representáveis sobre a reta real; (Tente passar um bit do campo de mantissa para o campo de expoente ...)
    • a representação de zero não pode ser normalizada, uma vez que ele não contém nenhum dígito não nulo. Em alguns computadores (que não utilizam bit escondido), ele é representado através de zero's tanto no campo da mantissa como no do expoente.

Quais são os caracteres representáveis pelo código ASCII (American Standard Code for Information Interchange)?

Código binário ASCII (ISO - 7 bits)

  b6b5b4 0 1 2 3 4 5 6 7
b3b2b1b0   000 001 010 011 100 101 110 111
0 0000 Null Data link escape (DLE) Space (SP) 0 @ P p
1 0001 Start of heading (SOH) Device control 1 (DC1) ! 1 A Q a q
2 0010 Start of text (STX) Device control 2 (DC2) ² 2 B R b r
3 0011 End of text (ETX) Device control 3 (DC3) # 3 C S c s
4 0100 End of Transmission (EOT) Device control 4 (DC4) $ 4 D T d t
5 0101 Enquiry (ENQ) Negative aknowledge (NAK) % 5 E U e u
6 0110 Acknowledge (ACK) Synchronous idle (SYN) & 6 F V f v
7 0111 Bell (BEL) End of transmission block (ETB) ' 7 G W g w
8 1000 Backspace (BS) Cancel (CAN) ( 8 H X h x
9 1001 Horizontal tab (HT) End of medium (EM) ) 9 I Y i y
A 1010 Line feed (LF) Substitute (SUB) * : J Z j z
B 1011 Vertical tab (VT) Escape (ESC) + ; K [ k {
C 1100 Form feed (FF) File separator (FS) , < L \ l |
D 1101 Carriage return (CR) Group separator (GS) - = M ] m }
E 1110 Shift out (SO) Record separator (RS) . = N ^ n ~
F 1111 Shift in (SI) Unit separator (US) / ? O _ o Delete (DEL)
    Caracteres de controle Caracteres imprimíveis

O código ASCII compreende 128 caracteres. Cada caracter é representado por 7 bits b6b5b4b3b2b1b0. O oitavo bit pode ser zerado, ou utilizado como bit de paridade.

Observe que

  1. os 4 bits menos significativos dos códigos dos digitos decimais correspondem ao código BCD. Isso facilita a comparação entre dois dígitos e a conversão entre os dois códigos; e
  2. os códigos binários que representam caracteres A-Z e a-z estão em ordem crescente. Isso facilita a ordenação de caracteres.


Seja 01101110 o conteúdo de um registrador de 8 bits. O que este código binário representa, considerando que ele seja:

  1. um código hexadecimal?
  2. um código octal?
  3. um código BCD?
  4. uma representação em ponto fixo (bit mais significativo (7) = sinal, bits 6-3 = parte inteira e bits 2-0 = parte fracionária, base = 2)?
  5. uma representação em ponto flutuante (bit mais significativo (7) = sinal, bits 6-3 = mantissa e bits 2-0 = expoente em complemento de 2, base = 2)?
  6. um código ASCII (7 bits menos significativos)?

  1. Código Hexadecimal: (6E)H = (110)10, pois
    0110 1110
    6 E
  2. Código Octal: adicionando um dígito 0 à esquerda, temos (156)8=(110)10, uma vez que
    001 101 110
    1 5 6
    Observe que, como já mencionado no
    item anterior, o valor numérico é o mesmo para a representação octal e a hexadecimal.
  3. Código BCD: não tem sentido, uma vez que os 4 bits menos significativos não correspondem a um padrão do código BCD.
  4. Ponto Fixo:
    • Sinal: 0 (positivo)
    • Parte Inteira: 1101
    • Parte Fracionária: 110
    23 + 22 + 20 + 2-1 + 2-2=13,75.
  5. Ponto Flutuante:
    • Sinal: 0 (positivo)
    • Mantissa: 0.1101
    • Expoente: 110
    Como a representação do expoente é complemento de 2, então o seu valor é (-2). O número representado é, portanto, 0.1101 x 2-2.
  6. Código ASCII: Pela tabela de ASCII o código corresponde à letra minúscula n.


Last modified: mon Apr 24 23:10:29 BRA 2008

Sugestões para leopini@dca.fee.unicamp.br

Voltar para a página do curso.