Upload
elliando-dias
View
1.095
Download
0
Embed Size (px)
Citation preview
AC − Repres. Números p.1
Mario 2001
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.2
Mario 2001
Sumário
° Representação do computador das "Coisas"
° 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.3
Mario 2001
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.4
Mario 2001
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.5
Mario 2001
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.6
Mario 2001
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.7
Mario 2001
Decimal vs. Hexadecimal vs.Binário
♦Exemplos:
♦1010 1100 0101 (binary) = AC5 (hex)
♦10111 (binary) = 0001 0111 (binary) = 17 (hex)
♦3F9(hex) = 11 1111 1001 (binary)
00 0 000001 1 000102 2 001003 3 001104 4 010005 5 010106 6 011007 7 011108 8 100009 9 100110 A 101011 B 101112 C 110013 D 110114 E 111015 F 1111
AC − Repres. Números p.8
Mario 2001
O que fazer com as representações de números?° Exatamente o que fazemos com números!
• Somá−los
• Subtraí−los
• Multiplicá−los
• Dividi−los
• Compará−los
° Exemplo: 10 + 7 = 17
• Tão simples somar em binário que podemos fazer circuitos para fazê−lo
• Subtração também exatamente como se faz em decimal
1 0 1 0
+ 0 1 1 1
−−−−−−−−−−−−−−−−
1 0 0 0 1
11
AC − Repres. Números p.9
Mario 2001
Comparação
° Como dizer se X > Y?
° Veja se X− Y > 0
AC − Repres. Números p.10
Mario 2001
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.11
Mario 2001
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.12
Mario 2001
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.13
Mario 2001
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.14
Mario 2001
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...
111111111010000 ...
° O que é −00000 ?
° Quantos números positivos em N bits?
° Quantos negativos?
AC − Repres. Números p.15
Mario 2001
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.16
Mario 2001
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.17
Mario 2001
"Linha" dos Números Complemento de 2�
s
° 2 N−1 não negativos
° 2 N−1 negativos
° um zero
° Quantos positivos?
° Overflow?
00000 0000100010
1111111110
10000 0111110001
0 12
−1−2
−15−16 15
.
.
.
.
.
.
−311101
−411100
AC − Repres. Números p.18
Mario 2001
Complemento de Dois 0000 ... 0000 0000 0000 0000dois = 0dez
0000 ... 0000 0000 0000 0001dois = 1dez0000 ... 0000 0000 0000 0010dois = 2dez. . .0111 ... 1111 1111 1111 1101dois = 2,147,483,645dez0111 ... 1111 1111 1111 1110dois = 2,147,483,646dez0111 ... 1111 1111 1111 1111dois = 2,147,483,647dez1000 ... 0000 0000 0000 0000dois = −2,147,483,648dez1000 ... 0000 0000 0000 0001dois = −2,147,483,647dez1000 ... 0000 0000 0000 0010dois = −2,147,483,646dez. . . 1111 ... 1111 1111 1111 1101dois = −3dez1111 ... 1111 1111 1111 1110dois = −2dez1111 ... 1111 1111 1111 1111dois = −1dez
° Um zero, 1° bit chamado bit de sinal , um negavito �
extra�
, não há 2,147,483,648dez
AC − Repres. Números p.19
Mario 2001
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
° Exemplo1111 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.20
Mario 2001
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 −4x : 1111 1111 1111 1111 1111 1111 1111 1100doisx
�
: 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.21
Mario 2001
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.22
Mario 2001
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.23
Mario 2001
Números são armazenados em endereços
° Memória é um lugar para armazenar bits
° Uma palavra é um número fixo de bits (e.g., 32) em um endereço.
° Endereços são naturalmente representados como número sem sinal
101101100110
00000
11111 = 2k − 1
01110
AC − Repres. Números p.24
Mario 2001
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 1111111110
unsigned
AC − Repres. Números p.25
Mario 2001
Conclusão
° Nós representamos "coisas" 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