Você está na página 1de 91

Sistemas de Numeração

Decimal, Binário de Hexadecimal


Representação da Informação

© 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

102 101 100 A potência indica o número


x x x de casas deslocadas para a
esquerda pelo símbolo!
2 1 3
200
10
3
Sistemas Decimal
• Exemplo 2: o número 21,3510 pode ser escrito
21,35 = 2 x 101 + 1 x 100 + 3 x 10-1 + 5 x 10-2

101 100 10-1 10-2


x x x x
2 1 , 3 5
200
10
0,3
0,05
Sistema Binário
• Utiliza dois dígitos apenas: 0 e 1
• Computadores eletrônicos usam voltagens
para representar estes valores (+5V e 0V)
• Um dígito binário é chamado de Bit (Binary
Digit)
– Menor unidade de informação possível
• 8 bits agrupados chama-se Byte (Binary Term)
Sistema Binário
• Gottfried Leibniz documentou o sistema
binário no artigo "Explication de
l'Arithmétique Binaire" (séc. XVIII) .
• George Boole definiu uma álgebra para o
sistema binário que se tornou base para os
computadores modernos (1854).
• Claude Shannon implementou a álgebra
booleana em circuitos elétricos pela primeira
vez na história (1937).

"A História do Número 1"


Sistema Binário
• S = {0,1} e b = 2
• Exemplo: o número 10012 pode ser escrito
1001 = 1 x 23 + 0 x 22 + 0 x 21 + 1 x 20

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

É mais simples exibir "E4" do que "11100100", não acha?


Sistema Hexadecimal
• S = {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} e b = 16
• Exemplo: o número 1BF16 pode ser escrito
1BF16 = 1 x 162 + B x 161 + F x 160

162 161 160


x x x
1 B F
100
B0
F
Sistema Hexadecimal
• Humor hexadecimal...
– Alguns SOs inicializam bytes de memória não
usada com o valor "DEADBEEF"
– Java usa o código "CAFEBABE" para identificar
seus arquivos compilados

0x12 em C vale 18 em decimal


Sistemas de Numeração
Decimal Binário Hexadecimal
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 10000 10
Conversões de Base
• De qualquer base para decimal
– Multiplica-se o valor do dígito pela sua potência
posicional e somam-se os resultados
• Exemplos: 10012 para decimal

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

4096 + 2816 + 240 + 3 = 7155

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

D = . D-1 D-2 D-3 ... D-l


Conversões de Base
• Converter 0,87510 para binário:

0,875 0,75 0,5 0 0,875 x 2 = 1,75 1


0,75 x 2 = 1,5  1
x2 x2 x2
0,5 x 2 = 1,0  1
1 1 1 0,0  PARE

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

x = Menor número inteiro que é maior ou igual a x


Conversões de Base
• Qual o maior número representável com k
dígitos na base b?
Nmax = bk – 1
• Exemplos:
– Maior número com 3 dígitos na base 10:
Nmax = 103 – 1 = 1000 – 1 = 999
– Maior número com 4 dígitos na base 2:
Nmax = 24 – 1 = 16 – 1 = 15 ( = 11112)
Parte 2
Representação da Informação
Números e Texto
Representação de Números
• Uma vez num computador, tudo vira binário...
• Como números inteiros e reais são
representados (i.e., armazenados)?
– Como representar números positivos?
– Como representar números negativos?
– Como representar a parte fracionária dos reais?
Números Inteiros
• Representação de inteiros
– Inteiros sem sinal
– Inteiros com sinal-magnitude
– Inteiros em Complemento-de-2
• Inteiros sem sinal
– Valores vão de 0 a 2k – 1, onde k= num. de dígitos
– Exemplo: 12 representado em 1 byte

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

 Uma variável inteira possui


o valor 4 (0100)
 É subtraído 7 deste valor
(desloca sentido anti-
horário)
 O resultado é 13 (1101)
Números Inteiros
• Inteiros com sinal-magnitude
– Um bit é usado para representar o sinal, sendo 1 =
negativo e 0 = positivo (o mais significativo)
– Nmax = (2k – 1) / 2; Nmin = – Nmax
– Existem duas representações para o número zero
– Exemplo com 4 bits: sinal
0111
magnitude

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

Nmax = (2k – 1) / 2; Nmin = – (Nmax + 1)


Números Inteiros
• Complemento-de-dois:

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

– Sinal: sinal do número (um bit basta)


– Deslocador: uma potência de 10 que indica para onde a
vírgula decimal (ponto, em inglês) deve se deslocar
– Número ponto fixo: o número convertido para uma
notação de ponto fixo
• Exemplo 1: Sinal = +
 +8.563.000.000.000,00
Deslocador = 12
 Torna-se: +8,563 x 1012
Número ponto fixo = 8,563
Números Reais
• Exemplo 2: Sinal = -
 -0,000000852 Deslocador = -7
 Torna-se: -8,52 x 10-7 Número ponto fixo = 8,52

• Converta para a notação científica:


 125.369,458
 -589,00008
 0,000159
Números Reais
• A técnica pode ser empregada em números
binários: Sinal = +
 1001110000000000,00 Deslocador = 15
 Torna-se: 1,00111 x 215 Número ponto fixo = 1,00111
• A parte em ponto fixo do número deve ser
normalizada:
– d,xxxxxxx em decimal, onde d e x = {1,...9}
– 1,bbbbbb em binário, onde b é 1 ou 0
Números Reais
• Ponto flutuante em binário:
Sinal Expoente Mantissa

– Sinal: um bit guarda o sinal + ou –


– Expoente: potência que indica o deslocamento
– Mantissa: parte fracionária do número binário em
ponto fixo normalizado
• Exemplo: Sinal = +

 1,00111 x 215 Expoente = 15


Mantissa= 00111
Não precisa guardar esse bit, pois ele é sempre 1
Números Reais
• Vamos às representações binárias de cada
parte:
– Sinal: um bit, sendo 0=positivo, 1=negativo
– Mantissa: é um número inteiro sem sinal (zeros à
esquerda, porém, importam!)
– Expoente: é um número com sinal, armazenado
num formato chamado de sistema Excesso
• Note que o expoente não é armazenado em
complemento-de-2, mas neste novo sistema!
Números Reais
• O Sistema Excesso_k:
-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8

+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:

1000101 1010101 0100000 1100001 1101101


1101111 0100000 1100011 1101111 1101101
1110000 1110101 1110100 1100001 1100100
1101111 1110010 1100101 1110011
Representação de Texto
• O ASCII foi estendido para 8 bits (totalizando
256 caracteres)
– Os primeiros 128 caracteres não mudam
– Os últimos 128 são variáveis, dependendo de
quem estende a tabela
– Cada extensão recebe o nome de code page.
Israel code page 862; Grécia  code page 737;
o IBM-PC code page 437; Brasil  850
• Atualmente, o ASCII é chamado US-ASCII pela
IANA (Internet Assigned Numbers Authority)
Representação de Texto
• Code Page 437 (IBM-PC)
Representação de Texto
• Code Page 850 (usados no Brasil)
Representação de Texto
Representação de Texto
• Existem outros padrões para suporte a
caracteres latinos e de línguas ocidentais
– Padrão ISO/IEC 8859 Latin-1 para caracteres da
língua portuguesa (áãàÁÃçÇ etc.)
– Padrão Windows-1252 (ou CP-1252) para
caracteres latinos e de outras línguas
• Como fazer para trabalhar com o alfabeto
grego e o latino juntos? Não tem como...
• E para piorar, veio a Internet...
Representação de Texto
ISO-8859-1
Representação de Texto
Windows-1252
Caracteres de
controle ou não
usados
Representação de Texto
• O padrão Unicode (1987)
– Criado por Joe Becker (Xerox); Lee Collins e Mark
Davis (Apple)
– Usava 16 bits (65.536 caracteres)
• Unicode 2.0 em 1996 acabou com a restrição
de 16 bits
– Pode representar 1.114.112 code points (0hex a
10FFFFhex, incluindo hieróglifos egípcios e outras
esquisitices)
Tengwar  Klingon 
Representação de Texto
• No Unicode, uma letra é mapeada para um
code point (um código dentro da tabela)
– Como ele será guardado em bytes é outra estória
• Um code point é representado por U+hexcode
– U+ significa "Unicode"
– hexcode é o valor do code point em hexadecimal
– Exemplo 1: U+0041 é o code point da letra A
– Exemplo 2: U+1304F é o code point de
– Divirta-se: http://www.unicode.org/
Representação de Texto
• A palavra "Hello" em code points é:
U+0048 U+0065 U+006C U+006C U+006F
• Guardando cada code point em 2 bytes...
00 48 00 65 00 6C 00 6C 00 6F
ou
48 00 65 00 6C 00 6C 00 6F 00 ?
• No início, Unicode foi ignorado, ele dobrava a
necessidade de espaço para texto
Representação de Texto
• Mas aí, inventaram o UTF-8
– Uma forma de guardar code points em bytes
– Econômica e compatível com códigos de 8 bits
• Dependendo do code point, ele pode ser
armazenado em 1, 2 ou até 6 bytes
Bits Último CP Byte 1 Byte 2 Byte 3 Byte 4
7 U+007F 0xxxxxxx
11 U+07FF 110xxxxx 10xxxxxx
16 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
21 U+1FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Representação de Texto
• Compatibilidade com o US-ASCII
– Os primeiros 128 caracteres são armazenados em
1 byte, com o mesmo código da tabela ASCII
• A mensagem "Hello" em UTF-8 é:
48 65 6C 6C 6F
• Em ASCII:
48 65 6C 6C 6F
Representação de Texto
• Exemplos de caracteres Unicode e suas
representações em bytes (em binário e hexa)
Hexadecimal
Caractere Binário do code point Binário UTF-8
UTF-8
$ U+0024 0100100 00100100 24
¢ U+00A2 000 10100010 11000010 10100010 C2 A2
€ U+20AC 00100000 10101100 11100010 10000010 10101100 E2 82 AC
11110000 10100100 10101101
𤭢 U+24B62 00010 01001011 01100010 F0 A4 AD A2
10100010
Referências Bibliográficas
• Fourozan, B., Mousharraf, F. Fundamentos da
Ciência da Computação. Cap.2 e Cap. 3. Cengage
Learning. 2012 (recomendo, ver último slide)
• ASCII em Wikipedia
http://en.wikipedia.org/wiki/ASCII
• Unicode and Charsets – Joel on Software
http://www.joelonsoftware.com/articles/Unicod
e.html
• Code page 437
http://en.wikipedia.org/wiki/Code_page_437
Referências Bibliográficas
• UTF-8 em Wikipedia
http://en.wikipedia.org/wiki/UTF-8
• Unicode em Wikipedia
http://en.wikipedia.org/wiki/Unicode
Referências Bibliográficas
• Recomendo o seguinte livro texto:

Você também pode gostar