Escolar Documentos
Profissional Documentos
Cultura Documentos
© fredguedespereira@gmail.com
Parte 1
Sistemas de Numeração
Decimal, Binário e Hexadecimal
Sistemas de Numeração
• Como o computador, usando apenas 0s e 1s,
manipula números, letras, símbolos, imagens,
sons, vídeos, etc?
• Em outras palavras: como a informação é
representada no computador?
• A seqüência 10100001 é:
– O número 161 em decimal?
– O código da letra "A"?
– A cor de um pixel de uma imagem?
– Parte de um som de uma música?
Sistemas de Numeração
• Sistema de Numeração
– Define como os números podem ser representados
utilizando distintos símbolos
• Sistema Decimal
– Utiliza os símbolos 0 a 9 (10 símbolos)
• Sistema Binário
– Utiliza os símbolos 0 e 1 (2 símbolos)
• Sistema Hexadecimal
– Utiliza os símbolos 0 a 9 e as letras A a F (16 símbolos)
Sistemas de Numeração
• Números no sistema decimal
– 110, 510, 3210, -10810, 44710
• Números no sistema binário
– 12, 1012, 1000002, 100101002, 1101111112
• Números no sistema hexadecimal
– 116, 516, 2016, -6C16, 1BF16
• Todos estes sistemas são posicionais
– O símbolo vale de acordo com a posição que
ocupa no número
Sistemas de Numeração
• Fórmula geral de qualquer sistema posicional:
N = ± (Sk-1...S2 S1 S0.S-1 S-2... S-l)b
• Onde:
– S é o conjunto de símbolos
– Si é o símbolo na posição i
– b é a base do sistema
N=Sk-1 x bk-1 + ... + S0 x b0 + S-1 x b-1 +...+ S-l x b-l
Sistemas Decimal
• S = {0,1,2,3,4,5,6,7,8,9} e b = 10
• Exemplo: o número 21310 pode ser escrito
213 = 2 x 102 + 1 x 101 + 3 x 100
23 22 21 20
x x x x
1 0 0 1
1000
000
00
1
Sistema Binário
• Exemplo 2 : o número 101,112 pode ser escrito
1001 = 1 x 22 + 0 x 21 + 1 x 20 + 1 x 2-1 + 1 x 2-2
22 21 20 2-1 2-2
x x x x x
1 0 1 , 1 1
100
00
1
0,1
0,01
Sistema Binário
• Humor binário...
"Existem apenas 10 tipos de pessoas: as que
entendem binário e as que não entendem"
"Em binário, está no Top 10 é muito mais
impressionante"
Sistema Hexadecimal
• Criado para exibir números binários de forma
mais clara para humanos
• Cada dígito hexadecimal equivale a 4 dígitos
binários (chamados de nibble)
• Usados em muitos contextos atualmente:
– URLs: http://www.examplo.com/joao%20pessoa
– XML: ’ código unicode do caractere '
– CSS: #FFFFFF código da cor branca
– Em C: 0xFF número 255
Sistema Hexadecimal
• Relação entre nibbles e dígitos hexadecimais
Binário Hexa Binário Hexa
0000 0 1000 8
0001 1 1001 9
0010 2 1010 A
0011 3 1011 B
0100 4 1100 C
0101 5 1101 D
0110 6 1110 E
0111 7 1111 F
23 22 21 20
x x x x
1 0 0 1 10012 = 910
8 + 0 + 0 + 1 = 9
Conversões de Base
• Exemplos: 1BF316 para decimal
163 162 161 160
x x x x
1 B F 3
1BF316 = 715510
Conversões de Base
• Converta os seguintes números para decimal:
a) 10016
b) 1002
c) 1010102
d) CAFE16
e) 10F16
f) 1216
g) 11112
Conversões de Base
• De decimal para qualquer base (parte inteira)
1) O número a ser convertido é chamado de fonte
2) Realiza-se a divisão inteira do fonte pela base a
ser convertida
3) Insere-se o resto à esquerda do número destino
4) Se o quociente for zero, PARE
5) Senão, faça o quociente ser o novo fonte e
retorne ao passo (2)
Conversões de Base
• O algoritmo anterior de forma esquemática:
– F: número fonte (decimal)
– Q: quociente da divisão por b
– D: número destino (na outra base)
Divide por b
0 Q ... Q Q Q F
R R R R R
D = Dk-1 ... D3 D2 D1 D0
Conversões de Base
• Exemplo:
– Converter 3510 para binário quociente
fonte
0 1 2 4 8 17 35
destino
1 0 0 0 1 1
3510 = 1000112
Conversões de Base
• Forma mais prática DEC BIN
Conversões de Base
• Exemplo:
– Converter 12610 para hexadecimal
0 7 126
7 E
12610 = 7E16
Conversões de Base
• Forma mais prática DEC HEX
R
Divisão Q
Dec Hex
721 / 16 45 1 1
45 / 16 2 13 D
2 / 16 0 2 2
72110 = 2D116
Conversões de Base
• Converta de decimal para a base pedida:
12810 BIN
409610 BIN
25410 BIN
25510 BIN
1210 HEX
4398110 HEX
6420210 HEX
9832261010 HEX
Conversões de Base
• De decimal para qualquer base (parte fracionária)
1) O número a ser convertido é chamado de fonte.
2) Realiza-se a multiplicação do fonte pela base a ser
convertida.
3) Insere-se a parte integral do resultado à direita do
número destino.
4) Se a parte fracionária for 0 ou se se atingiu uma dada
quantidade de casas decimais, PARE.
5) Senão, faça a parte fracionária ser o novo fonte e
retorne ao passo (2).
Conversões de Base
• O algoritmo anterior de forma esquemática:
– F: número fonte (decimal)
– f: parte fracionária da multiplicação por b
– i: parte integral da multiplicação por b
– D: número destino (na outra base)
Multiplica por b
F f f ... f 0
i i i i
0,87510 = 0,1112
Conversões de Base
• Converter 0,87410, porém...
0,874 x 2 = 1,748 1
0,748 x 2 = 1,496 1 0,87410 ≈ 0,110111111012
0,496 x 2 = 0,992 0
0,992 x 2 = 1,984 1
0,984 x 2 = 1,968 1 0,87353515625
0,968 x 2 = 1,936 1
0,936 x 2 = 1,872 1 •A conversão pode ser muito longa ou
0,872 x 2 = 1,744 1 gerar uma dízima periódica em binário.
0,744 x 2 = 1,488 1 •Deve-se parar quando o número atingir
0,488 x 2 = 0,976 0 uma quantidade satisfatória de dígitos.
0,976 x 2 = 1,952 1
... Quando isto acaba?
Conversões de Base
• Converter 178,610 para hexadecimal (3 casas):
– Parte integral (÷16)
178 / 16 = 11 e resto 2
11 / 16 = 0 e resto B
– Parte fracionária (x 16)
0,6 x 16 = 9,6 9
0,6 x 16 = 9,6 9 178,610 ≈ B2,99916
0,6 x 16 = 9,6 9
Conversões de Base
• Conversão binário-hexadecimal
– Cada 4 bits BIN equivalem a um dígito HEX e vv.
Binário Hexa Binário Hexa
binário 11100110 0000 0 1000 8
0001 1 1001 9
0010 2 1010 A
0011 3 1011 B
hexadecimal E 5 0100 4 1100 C
0101 5 1101 D
0110 6 1110 E
0111 7 1111 F
Conversões de Base
• Converta para a base solicitada
25516 BIN
FACA16 BIN
BEEF16 BIN
1101102 HEX
0011110102 HEX
1102 HEX
1111000100102 HEX
Conversões de Base
• Quantos dígitos são necessários para
representar um número numa determinada
base?
k = logb N
• Exemplos:
– k10 = log10 234 = 2,37 = 3 23410
– k16 = log16 234 = 1,96 = 2 EA16
– k2 = log2 234 = 7,8 = 8 111010102
00001100
Números Inteiros
• Overflow Uma variável inteira possui
o valor 12 (1100)
É somado 5 a este valor
(desloca sentido horário)
O resultado é 1 (0001)
Subtração Adição
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0 1 2 3 4 5 6 7 -0 -1 -2 -3 -4 -5 -6 -7
Números Inteiros
• Tenho 8 bits, qual o maior e menor valor que
posso representar com sinal-magnitude?
Nmax = (28 – 1) / 2 = (256 – 1) / 2 = +127
Nmin = -Nmax = -127
• Represente os inteiros a seguir em 8-bit s-m:
110 1101110 011011102
-45 0101101 101011012
-3 0000011 100000112
com 7 bits
Números Inteiros
1111 0000 Overflow negativo
1110 0001 • Ocorre quando se tenta
-7 +0
-6
1101
1 armazenar um número
-5 0010
2 que é menor que o Nmin
1100 -4
3 0011 • Subtrair 7 de -5 produz
-3 Subtrai 7 um valor incorreto: 6
1011 4 0100
-2 • Subtrair 4 de 2 produz
1010 -1 5 0101 um valor incorreto: -6
-0 6
1001 7
0110
1000 0111 soma
subtração
Números Inteiros
1111 0000 Overflow positivo
1110 0001 • Ocorre quando se tenta
-7 +0
-6
1101
1 armazenar um número
-5 0010
2 que é maior que o Nmax
1100 -4
3 0011 • Somar 6 a +5 produz um
-3 valor incorreto: -3
1011 4 0100
-2 Somar 6
5
• Somar 6 a -5 produz um
1010 -1 0101 valor incorreto: 3
-0 6
1001 7
0110
1000 0111 soma
subtração
Números Inteiros
• Inteiros em complemento-de-dois
– Utilizado pela maioria dos computadores
– Permite que a subtração seja realizada com soma
– Possuem apenas uma representação do zero
– Exemplo: escala para números de 4 bits
1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7
Número original =
0010 = +210
Transfere os bits, da direita para a
esquerda, até achar o primeiro 1
10
Transfere os bits restantes invertidos
Complemento-de-2 =
1110 = -210
Números Inteiros
• Complemento-de-dois com 1 byte:
Número original =
00000010 = +210
10
Complemento-de-2 =
11111110 = -210
Números Inteiros
• Represente, em binário, o complemento-de-
dois (em 8 bits) para os seguintes números
decimais:
28
-39
14
-7
-246
Números Inteiros
1111 0000 Overflow negativo
1110 0001 • Ocorre quando se tenta
-1 +0
-2
1101
1 armazenar um número
-3 0010
2 que é menor que o Nmin
1100 -4
3 0011 • Subtrair 7 de -3 produz
-5 Subtrai 7 um valor incorreto: 6
1011 4 0100
-6 • Mas... subtrair 4 de 2
1010 -7 5 0101 produz um valor correto:
-8 6
1001 7 -2
0110
1000 0111 soma
subtração
Números Inteiros
1111 0000 Overflow positivo
1110 0001 • Ocorre quando se tenta
-1 +0
-2
1101
1 armazenar um número
-3 0010
2 que é maior que o Nmax
1100 -4
3 0011 • Somar 6 a +5 produz um
-5 valor incorreto: -5
1011 4 0100
-6 Somar 6
5
• Mas...somar 5 a -3
1010 -7 0101 produz um valor correto:
-8 6
1001 7 2
0110
1000 0111 soma
subtração
Números Inteiros - Comparativo
Padrão binário Sem sinal Sinal-Mag. Compl.-2
0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 7 7
1000 8 -0 -8
1001 9 -1 -7
1010 10 -2 -6
1011 11 -3 -5
1100 12 -4 -4
1101 13 -5 -3
1110 14 -6 -2
1111 15 -7 -1
Números Reais
• Possuem uma parte inteira e outra fracionária
• Uma forma mais limitada de representação é
chamada de ponto fixo
– Fixa-se a quantidade de casas para a parte inteira
e fracionária.
– Exemplo 5 casas inteiras e 2 fracionárias: 1,00345
torna-se 1,00 e 239.874,12 torna-se 39.874,12
• Um forma mais precisa é a do ponto flutuante
– Também chamada de notação científica
– Em inglês: floating point
Números Reais
• Formato da notação de ponto flutuante (científica):
Sinal Deslocador Número ponto fixo
+7 (bias)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-7 = 0000 0 = 0111
-6 = 0001 1 = 1000 Cálculo do bias: 2 m-1 -1
-5 = 0010 ...
-4 = 0011 14 = 1110 onde m = número de bits
... 15 = 1111
Números Reais
• Padrão IEEE-754/1985 para números reais:
– Excesso_127: real de precisão simples
– Excesso_1023: real de precisão dupla
1 8 23
S Expoente Mantissa Excesso_127 (32 bits)
1 11 52
S Expoente Mantissa Excesso_1023 (64 bits)
Números Reais
• Algoritmo para representar números reais:
1) Armazene o sinal em S (0 ou 1)
2) Transforme o número em binário (já sem o sinal)
3) Normalize
4) Encontre os valores de E e M
a) E = valor do expoente + bias
b) M = parte fracionária do número normalizado
5) Concatene S, E e M, nesta ordem
Números Reais
• Represente o número 17,37510 em Excesso_127
1) O sinal S é 0 (positivo)
2) 17,375 em binário vale 10001,0112
3) 10001,0112 = 1,00010112 x 24
4) E = 4 + 127 = 131 = 100000112 (com 8 bits!)
M = 0001011 (mais 16 zeros à direita)
5) Concatenando, obtemos o número de 32 bits:
01000001100010110000000000000000
S E M
Números Reais
• Represente o número -0,023437510 em
Excesso_127
1) O sinal S é 1 (negativo)
2) 0,023437510 = 0,00000112
3) 0,0000011 = 1,12 x 2-6
4) E = -6 + 127 = 12110 = 011110012
M = 1 10000000000000000000002
5) Concatenando tudo:
10111100110000000000000000000000
S E M
Números Reais
• Converta os número reais a seguir para a
notação de 32 bits da IEEE-754:
a) 7,1875
b) -12,640625
c) 11,40625
d) -0,375
e) +2-4 x 1,011100112
f) -23 x 1,1111112
Números Reais
• Algoritmo para recuperar reais:
1) Encontre S, E e M no padrão binário
2) Se S=0, número positivo, senão, negativo
3) Encontre o deslocador = E – 127
4) Desnormalize a mantissa M
5) Converta para decimal
6) Adicione o sinal S
Números Reais
• O padrão a seguir está em Excesso_127.
Encontre o número real em decimal
11001010000000000111000100001111
1) Encontre S, E e M:
11001010000000000111000100001111
S=1
E = 10010100
M = 00000000111000100001111
Números Reais
2) S = 1, o número é negativo
3) E = 100101002 = 14810 – 127 = 21
4) M = 000000001110001000011112
M = 1,000000001110001000011112 x 221
M desnorm. = 10000000011100010000,112
5) 10000000011100010000,112 = 2.104.378,7510
6) N = –2.104.378,7510
Números Reais
• Dados os padrões abaixo no formato IEEE-754,
encontre o número real equivalente:
a) 01000010111101101110100101111001
b) 11000001001000000000010000011001
c) 10111001000000001111100110010000
d) 01000110101101110100000000110011
Números Reais
• Na linguagem C:
#include<stdio.h>
int main() {
float x; Padrão IEEE 754 para reais
double y; de precisão simples e dupla
x = 13.75;
y = 7.00220030;
}
Representação de Texto
• Normalmente utiliza-se um código para:
– Identificar letras
– Identificar caracteres de pontuação
• No começo, cada computador tinha seu código
– Incompatibilidade entre eles
• Em 1963 o ANSI propôs o código ASCII (American
Standard Code for Information Interchange)
– Serve para computadores, telégrafos, etc.
Representação de Texto
• O código ASCII representa caracteres, sendo:
– Letras (maiúsculas e minúsculas)
– Dígitos de 0 a 9 (não servem para aritmética)
– Caracteres especiais (# $ & etc.)
– Caracteres de pontuação (! . , ; etc.)
– Caracteres de controle (não imprimíveis)
• Utiliza 7 bits, totalizando 127 caracteres
– Há uma versão estendida com 8 bits
Representação de Texto
Código ASCII
Representação de Texto
• Da tabela anterior percebemos:
– Os primeiros 32 caracteres não são imprimíveis
• Controle da impressora, modem, etc.
– Os caracteres imprimíveis vão do 32 ao 127
– O três primeiros bits do código indicam a coluna e
os quatro últimos a linha do caractere na tabela:
• A = 1000001 quarta coluna, segundo caractere
• a = 1100001 quinta coluna, segundo caractere
– É mais comum usar o código em decimal
• O código da letra A é 100001 (binário) ou 65 (decimal)
Representação de Texto
• Programa em C para gerar todos os caracteres
imprimíveis da tabela ASCII:
#include <stdio.h> [32]
#include <stdlib.h> ![33]
"[34]
int main() { #[35]
$[36]
int i; %[37]
for (i = 32; i < 127; i++) { &[38]
printf( "%c[%d]\n", i , i ); '[39]
} ([40]
)[41]
return 0; *[42]
} +[43]
Representação de Texto
• A mensagem "Eu amo computadores" é
representada em 7-bit ASCII por: