From Lisp to Clojure/Incanter and RAn Introduction
Representação de Números
1. AC − Arquitetura de Computadores
Aula 2 − Representação de Números
2001
Mário O. de Menezes
http://www.tf.ipen.br/~mario
AC − Repres. Números p. Mario 2001
1
Sumário
° Representação do computador das quot;Coisasquot;
° Números sem sinal Unsigned
° Computadores trabalhando
° Números com sinal Signed: busca por uma boa
representação
° Atalhos
° Conclusão
AC − Repres. Números p. Mario 2001
2
2. O que os computadores fazem?
° Computadores manipulam representações de
coisas!
° O que se pode representar com N bits?
2N coisas!
° Quais coisas?
Números! Caracteres! Pixels! Dolars!
Posição! Instrucões! ...
Depende de quais operações se faz sobre eles
AC − Repres. Números p. Mario 2001
3
Números Decimais: Base 10
° Digitos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
° Exemplo:
3271 =
(3x103) + (2x102) + (7x101) + (1x100)
AC − Repres. Números p. Mario 2001
4
3. Números: notação posicional
° Número Base B => B símbolos por dígito:
Base 10 (Decimal): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Base 2 (Binário): 0, 1
° Representação do Número:
d31d30 ... d2d1d0 é um número de 32 dígitos
valor = d31x B31 + d30 x B30 + ... + d2 x B2 + d1 x B1 + d0 x B0
° Binário: 0,1
1011010 = 1x26 + 0x25 + 1x24 + 1x23 + 0x22 + 1x2 + 0x1 = 64 + 16
+ 8 + 2 = 90
Note que um número binário de 7 dígitos se transforma em um
número decimal de 2 dígitos.
Existe uma base que converte facilmente para números binários?
AC − Repres. Números p. Mario 2001
5
Números Hexadecimais: Base 16
° Hexadecimal:
0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F
Dígitos Normais + 6 mais: tomados do alfabeto
° Conversão: Binário <−> Hex
1 dígito hex representa 16 valores decimais
4 dígitos binários representam 16 valores decimal
=> 1 dígito hex substituti 4 dígitos binários
° Exemplos:
1010 1100 0101 (binary) = ? (hex)
10111 (binary) = 0001 0111 (binary) = ?
3F9(hex) = ? (binary)
AC − Repres. Números p. Mario 2001
6
4. Decimal vs. Hexadecimal vs.Binário
00 0 0000
♦Exemplos: 01 1 0001
♦1010 1100 0101 (binary) 02 2 0010
= AC5 (hex) 03 3 0011
04 4 0100
05 5 0101
♦10111 (binary) 06 6 0110
= 0001 0111 (binary) 07 7 0111
= 17 (hex) 08 8 1000
09 9 1001
10 A 1010
♦3F9(hex) 11 B 1011
= 11 1111 1001 (binary)
12 C 1100
13 D 1101
14 E 1110
15 F 1111
AC − Repres. Números p. Mario 2001
7
O que fazer com as representações
de números?
° Exatamente o que fazemos com números!
• Somá−los 1 1
• Subtraí−los
1 0 1 0
• Multiplicá−los
• Dividi−los + 0 1 1 1
• Compará−los −−−−−−−−−−−−−−−−
° Exemplo: 10 + 7 = 17
1 0 0 0 1
• Tão simples somar em binário que podemos
fazer circuitos para fazê−lo
• Subtração também exatamente como se faz em
decimal
AC − Repres. Números p. Mario 2001
8
5. Comparação
° Como dizer se X > Y?
° Veja se X− Y > 0
AC − Repres. Números p. Mario 2001
9
Qual base nós utilizamos?
° Decimal: bom para humanos, especialmente para
fazer aritmética
° Hex: ao olhar para uma string longa de números
binários, é muito mais fácil converter para hex e
olhar 4 bits/símbolo
Terrível para aritmética; just say no
° Binário: o que computadores usam;
aprender como os computadores fazem +,−,*,/
Para um computador, números sempre binários
Não importa como o número é escrito:
3210 == 0x20 == 1000002
¡ ¢ ¡ ¢ ¡ ¢
Use subscritos dez , hex , dois no texto,
slides, etc quando puder confundir
AC − Repres. Números p. Mario 2001
10
6. Limites dos Números do Computador
° Bits podem representar qualquer coisa!
° Caracteres?
26 letras => 5 bits
maisc./minusc. + pontuação
¡ ¢
=> 7 bits (em 8) ( ascii )
Código padrão para atender todas as
linguagens do mundo => 16 bits (unicode)
° Valores lógicos?
0 −> Falso, 1 => Verdadeiro
° cores ?
° localizações / endereços? comandos?
° Mas N bits => somente 2N coisas
AC − Repres. Números p. Mario 2001
11
Como representar números negativos?
° Até agora, números sem sinal unsigned
° Solução óbvia: definir o bit mais à esquerda para
ser o sinal!
0 => +, 1 => −
Resto dos bits podem ser valores numéricos do
número
° Representação chamada sign and magnitude
° MIPS usa inteiros de 32−bit +1dez seria:
0000 0000 0000 0000 0000 0000 0000 0001
° E − 1dez em sign and magnitude would be:
1000 0000 0000 0000 0000 0000 0000 0001
AC − Repres. Números p. Mario 2001
12
7. Problemas da sign and magnitude?
° Circuito Aritmético mais complicado
Passos especiais dependendo se os sinais são
os mesmos ou não
° Ainda, dois zeros
0x00000000 = +0dez
0x80000000 = −0dez
O que significaria para a programação?
° Sign and magnitude abandonada
AC − Repres. Números p. Mario 2001
13
Outra tentativa: complementar os bits
° Exemplo: 710 = 001112 −710 = 110002
° Chamada complemento de um
° Nota: números positivos tem 0s na frente, números
negativos tem 1s.
00000 00001 ... 01111
10000 ... 11110 11111
° O que é −00000 ?
° Quantos números positivos em N bits?
° Quantos negativos?
AC − Repres. Números p. Mario 2001
14
8. Problemas do complemento de um
° Aritmética não muito difícil
° Ainda dois zeros
0x00000000 = +0dez
0xFFFFFFFF = −0dez
O que significaria para a programação?
° Complemento de um abandonado porque outra
solução foi melhor
AC − Repres. Números p. Mario 2001
15
Busca por Representação do Número Negativo
♦Qual é o resultado para números sem sinal se tentamos subtrair
um número grande de um pequeno?
• Tentaria pegar da string de 0s da frente de modo que o
resultado seria uma string de 1s na frente
− 3 − 4 => £ 0011 − £ 0100 = £ 1111
• Na falta de uma alternativa melhor, escolher a representação
que faz o hardware simples.
• Como com o complemento de um, 0s a frente ⇒ positivo,
1s a frente ⇒ negativo
− 000000...xxx é >=0, 111111...xxx é < 0
− exceto £ 1111 é −1 não zero
♦Complemento de dois
AC − Repres. Números p. Mario 2001
16
9. ¤
quot;Linhaquot; dos Números Complemento de 2 s
00000 00001
11111
11110 00010 ° 2 N−1 não negativos
−1 0 1
11101 −2 2 ° 2 N−1 negativos
11100 −3 ° um zero
−4
. . ° Quantos positivos?
. . ° Overflow?
. .
−15−16 15
10001 10000 01111
AC − Repres. Números p. Mario 2001
17
Complemento de Dois
0000 ... 0000 0000 0000 0000dois = 0dez
0000 ... 0000 0000 0000 0001dois = 1dez
0000 ... 0000 0000 0000 0010dois = 2dez
...
0111 ... 1111 1111 1111 1101dois = 2,147,483,645dez
0111 ... 1111 1111 1111 1110dois = 2,147,483,646dez
0111 ... 1111 1111 1111 1111dois = 2,147,483,647dez
1000 ... 0000 0000 0000 0000dois = −2,147,483,648dez
1000 ... 0000 0000 0000 0001dois = −2,147,483,647dez
1000 ... 0000 0000 0000 0010dois = −2,147,483,646dez
...
1111 ... 1111 1111 1111 1101dois = −3dez
1111 ... 1111 1111 1111 1110dois = −2dez
1111 ... 1111 1111 1111 1111dois = −1dez
¡ ¢
° Um zero, 1° bit chamado bit de sinal , um negavito extra , não há
2,147,483,648dez p.
AC − Repres. Números Mario 2001
18
10. Fórmula do Complemento de Dois
° Pode representar números positivos e negativos em termos
do valor do bit vez uma potência de 2:
d31 x −231 + d30 x 230 + ... + d2 x 22 + d1 x 21 + d0 x 20
° Exemplo
1111 1111 1111 1111 1111 1111 1111 1100dois
= 1x−231 +1x230 +1x229+... +1x22+0x21+0x20
= −231 + 230 + 229 + ... + 22 + 0 + 0
= −2,147,483,648dez + 2,147,483,644dez
= −4dez
° Nota: deve−se especificar a largura: nós usamos 32 bits
AC − Repres. Números p. Mario 2001
19
Atalho do complemento de dois: Negação
° Inverter cada 0 para 1 e cada 1 para 0, então somar 1 ao resultado
Soma de um número seu complemento de um deve ser
111...111dois
111...111dois= −1dez
¥
Seja x a representação invertida de x
Então x + x = −1 ⇒ x + x + 1 = 0 ⇒ x + 1 = −x
¥ ¥ ¥
° Exemplo: −4 para +4 para −4
x : 1111 1111 1111 1111 1111 1111 1111 1100dois
x : 0000 0000 0000 0000 0000 0000 0000 0011dois
¥
+1: 0000 0000 0000 0000 0000 0000 0000 0100dois
() : 1111 1111 1111 1111 1111 1111 1111 1011dois
¥
+1: 1111 1111 1111 1111 1111 1111 1111 1100dois
AC − Repres. Números p. Mario 2001
20
11. Atalho do compl. de dois: extensão do sinal
♦ Converter número em complemento de 2 usando n bits
para mais de n bits
♦ Simplesmente repetir o bit mais significante (bit de sinal)
do menor para preencher os novos bits
•Complemento de 2 positivo tem infinitos 0s
•Complemento de 2 negativo tem infinitos 1s.
•Representação de bit esconde os bits a frente;
extensão de sinal restaura alguns deles
•16−bit −4dez para 32−bit:
1111 1111 1111 1100dois
1111 1111 1111 1111 1111 1111 1111 1100dois
AC − Repres. Números p. Mario 2001
21
Números com Sinal vs. Números sem Sinal
° Declaração C int
Declara um número com sinal
Usa complemento de dois
° Declaração C unsigned int
Declara um número sem sinal
Trata números 32 bits como inteiros sem sinal, de modo que o
bit mais significante é parte do número, não um bit de sinal
° X = 1111 1111 1111 1111 1111 1111 1111 1100dois
° Y = 0011 1011 1001 1010 1000 1010 0000 0000dois
° É X > Y?
Sem sinal: SIM
Com sinal: NãO
AC − Repres. Números p. Mario 2001
22
12. Números são armazenados em endereços
00000 ° Memória é um lugar para
armazenar bits
° Uma palavra é um número fixo
101101100110 01110
de bits (e.g., 32) em um
endereço.
° Endereços são naturalmente
representados como número
sem sinal
11111 = 2k − 1
AC − Repres. Números p. Mario 2001
23
E se o número for muito grande?
° Os padrões de bits acima são apenas representações de
números
° Os números realmente tem um número infinito de dígitos
• Com quase todos sendo os mesmos exceto por alguns
poucos mais à direita
• Simplesmente não mostre normalmente os dígitos à
frente
° Se o resultado de somar (−, *, /) não pode ser
representado por estes bits de HW mais à direita,
acontece o que é conhecido como overflow
00000 00001 00010 11110 11111
unsigned
AC − Repres. Números p. Mario 2001
24
13. Conclusão
° Nós representamos quot;coisasquot; no computador como
padrões particulares de bits: N bits =>2N
números, caracteres, ...
° Decimal para cálculos humanos, binário para
entender computadores, hex para entender binário
° Complemento de 2 é universal em computação: não
pode ser evitado, então aprenda
° Operações no Computador sobre as
representações de números correspondem as
operações reais sobre as coisas reais.
° Overflow: números são infinitos mas os
computadores são finitos, assim erros podem
ocorrer
AC − Repres. Números p. Mario 2001
25