Arquitectura de Computadores

Notas de estudo

Alberto José Proença

1998/99

 

Índice geral

 

Anexo A : Representação de inteiros

1.      Binário puro

    1. Base hexadecimal
    2. Números negativos

 

  1. Binário puro

NOTA:Ver secções 4.1 e 4.2 do livro

Os números podem ser representados em qualquer base. Normalmente usamos base 10 (por isso usamos 10 dígitos diferentes). Os computadores pelo facto de só conhecerem dois valores 0 e 1, são máquinas binárias, e por isso que trabalham em base 2 (binário).

Para compreender o que significa a base em que os números são representados é necessário entender o significado da ordem dos dígitos. A ordem de um dígito dentro de um número é dada pela posição que esse dígito ocupa no número, sendo que a ordem do dígito menos significativo é 0. A base utilizada determina o número de dígitos que podem ser utilizados. Base 10 utiliza 10 dígitos (0 a 9), base 2 utiliza 2 dígitos (0 e 1), base 16 utiliza 16 dígitos (0 a 9, e, A a F).

Exemplo

Número: 1532

Algarismo 2 - ordem 0
Algarismo 3 - ordem 1
Algarismo 5 - ordem 2
Algarismo 1 - ordem 3

O valor do número (escrito na base b) obtém-se multiplicando cada dígito pela base b elevada à ordem do dígito e somando todos estes valores.

Exemplo

Número: 15326 (base 6)

1 * 63 + 5 * 62 +3 * 61 +2 * 60 = 41610

Número: 153210 (base 10)

1 * 103 + 5 * 102 +3 * 101 +2 * 100 = 153210

Número: 153213 (base 13)

1 * 133 + 5 * 132 +3 * 131 +2 * 130 = 308310

Podemos agora converter alguns números escritos em binário para base 10.

Exemplo

Número: 1101102

1 * 25 + 1 * 24 + 0 * 23 + 1 * 22 + 1 * 21 + 0 * 20 = 5410

Para converter de base decimal para base binária divide-se sucessivamente por 2 e tomam-se os restos e o último quociente.

Exemplo

Número: 23510

235/2 = 117

Resto = 1

/* bit menos significativo */

117/2 = 58

Resto = 1

 

58/2 = 29

Resto = 0

 

29/2 = 14

Resto = 1

 

14/2 = 7

Resto = 0

 

7/2 = 3

Resto = 1

 

3/2 = 1

Resto = 1

/* bit mais significativo */

 

23510 = 111010112

Para adicionar números em binário ver secção 4.3 do livro.

Os processadores utilizam um determinado número de bits para representar um número. A quantidade de bits utilizados determina a gama de valores que podem ser representados. Em binário puro podem-se escrever 2n números, sendo n o número de bits utilizados. O maior inteiro que pode ser representado depende, portanto, do tamanho da palavra em cada processador. Surge assim o problema de somar dois inteiros e obter um número maior do que aquele que a máquina pode representar. Esta situação é normalmente designada por overflow e deve ser tomada em consideração quer pelos programadores, quer pelos desenhadores de microprocessadores (ver pág. 176 do livro).

 

 

  1. Base hexadecimal

A base hexadecimal (16) é frequentemente utilizada pelos programadores porque é bastante fácil converter de binário para hexadecimal (e vice-versa) e porque é bastante mais fácil ler um número em hexadecimal do que em binário.

São utilizados 16 dígitos: 0, 1, ..., 9, A, B, C, D, E, F.

Exemplo

Representar 431210 em hexadecimal.

4312 / 16 = 269

Resto = 8

 

269 / 16 = 16

Resto = 13 (Dígito D)

 

16 / 16 = 1

Resto = 0

 

1 / 16 = 0

Resto = 1

 

 

Logo 431210 = 10D816

Exemplo

Representar 2AF316 em decimal.

2 * 163 + 10 * 162 + 15 * 161 + 3 * 160 = 1099510

Nota: A = 10, F = 15.

 

A motivação para usar hexadecimal é a facilidade com que se converte entre esta base e binário. Cada dígito hexadecimal representa um valor entre 0 e 15. Cada conjunto de 4 bits representa também um valor no mesmo intervalo. Então podemos converter aos grupos de 4 bits.

Exemplo 1

  2    A    F  (hexadecimal)

0010 1010 1111 (binário)

ou,

2AF16 = 0010101011112

 

Exemplo 2

1101 0101 1011 (binário)

  D    5    B  (hexadecimal)

ou,

1101010110112 = D5B16

 

  1. Números negativos

NOTA: Ver secção 4.2 do livro

Os computadores lidam com números positivos e números negativos, logo é necessário encontrar uma representação para números com sinal negativo. Uma possibilidade é inverter todos os bits de um número para representar o número correspondente com sinal negativo. Esta representação é designada por complemento para um .

Exemplo

10010 = 011001002 utilizando 8 bits

Invertendo todos os bits obtemos:

-10010 = 100110112

O problema desta representação é que existem 2 padrões de bits para o 0. Nomeadamente 010 = 000000002 = 111111112. A solução encontrada consiste em representar os números em complemento para 2 . Para determinar o negativo de um número negam-se todos os seus bits e soma-se uma unidade.

Exemplo

10010 = 011001002 utilizando 8 bits

Invertendo todos os bits obtemos:

100110112

Somando uma unidade : 100110112 + 1 = 100111002 = -10010

A representação em complemento para 2 tem as seguintes características:

Exemplo

Qual o número representado por 111001002 ?

Como o bit da esquerda é 1 este número é negativo.
Vamos inverter:
000110112
Somando uma unidade :
000110112 + 1 = 000111002 = 2810

Logo 111001002 = - 2810

NOTA: Ver secção 4.2 do livro para detalhes sobre adição, subtracção e overflow.

Como é que podemos converter um número representado em complemento para 2 com n bits para um número representado com mais bits? Resposta: basta fazer a extensão do sinal! Se o número é positivo acrescenta-se 0's à esquerda, se o número é negativo acrescenta-se 1's à esquerda.

Exemplo

Representar os seguintes números com 16 bits.

0011101010
Positivo, logo:
0000000011101010

11011110
Negativo, logo:
1111111111011110

A multiplicação e a divisão têm algoritmos algo complexos que ultrapassam o âmbito destas notas de estudo. No entanto a divisão e multiplicação por potências de 2 realizam-se efectuando shifts à direita ou à esquerda, respectivamente.

Fazer o shift à esquerda uma vez de um número binário corresponde a multiplicar por 2, duas vezes corresponde a multiplicar por 4 e assim sucessivamente. O mesmo se aplica à divisão com o shift à direita.

Exemplo

Dividir 110010102 = 20210 por 4.

É necessário fazer o shift à direita 2 vezes: 0001100102 = 5010

Multiplicar 0000010102 = 1010 por 8.

É necessário fazer o shift à esquerda 3 vezes: 0010100002 = 8010

Esta regra também se aplica aos números em complemento para 2 desde que se mantenha o sinal.