Sistemas de Numeração
Decimal, Binário de Hexadecimal
Representação da Informação
Parte 1
Sistemas de Numeração
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
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 = ± (S
k-1...S
2S
1S
0.S
-1S
-2... S
-l)
b• Onde:
– S é o conjunto de símbolos – Si é o símbolo na posição i – b é a base do sistemaN=
S
k-1x b
k-1+ ... + S
0x b
0+ S
-1x b
-1+...+ S
-lx b
-lSistemas Decimal
• S = {0,1,2,3,4,5,6,7,8,9} e b = 10
• Exemplo: o número 213
10pode ser escrito
213 = 2 x 102 + 1 x 101 + 3 x 100 102 101 100 2 1 3 200 10 3
A potência indica o número de casas deslocadas para a esquerda pelo símbolo!
x x
Sistemas Decimal
• Exemplo 2: o número 21,35
10pode ser escrito
21,35 = 2 x 101 + 1 x 100 + 3 x 10-1 + 5 x 10-2 101 100 10-1 2 1 3 200 10 0,3 , 10-2 5 0,05 x x x x
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
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).
Sistema Binário
• S = {0,1} e b = 2
• Exemplo: o número 1001
2pode ser escrito
1001 = 1 x 23 + 0 x 22 + 0 x 21 + 1 x 20 22 21 20 0 0 1 1000 000 00 23 1 1 x x x x
Sistema Binário
• Exemplo 2 : o número 101,11
2pode ser escrito
1001 = 1 x 22 + 0 x 21 + 1 x 20 + 1 x 2-1 + 1 x 2-2 21 20 2-1 0 1 1 100 00 1 22 1 0,1 2-2 1 0,01 , x x x x x
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
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
Sistema Hexadecimal
• Relação entre nibbles e dígitos hexadecimais
Binário Hexa 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 Binário Hexa 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F
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 1BF
16pode ser escrito
1BF
16= 1 x
16
2+ B x
16
1+ F x
16
0 162 161 160 1 B F 100 B0 F x x xSistema 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
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: 1001
2para decimal
22 21 20 0 0 1 23 1 x x x x 8 + 0 + 0 + 1 = 9
1001
2= 9
10Conversões de Base
• Exemplos: 1BF3
16para decimal
4096 + 2816 + 240 + 3 = 7155
1BF3
16= 7155
10 162 161 160 B F 3 x x x 163 1 xConversõ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)
F Q Q 0 Q Q Dk-1 ... D3 D2 D1 D0 R R R R ... R D = Divide por b
Conversões de Base
• Exemplo:
– Converter 3510 para binário
35 17 8 4 2 1 0 1 0 0 0 1 1
35
10= 100011
2 fonte destino quocienteConversões de Base
Conversões de Base
• Exemplo:
– Converter 12610 para hexadecimal
126 7
0
7 E
Conversões de Base
• Forma mais prática DEC HEX
Divisão Q R Dec Hex 721 / 16 45 1 1 45 / 16 2 13 D 2 / 16 0 2 2
721
10= 2D1
16Conversõ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)
F f f f 0 D-1 D-2 D-3 ... D-l i i i ... i D = . Multiplica por b
Conversões de Base
• Converter 0,875
10para binário:
0,875 0,75 0,5 1 1
0,875
10= 0,111
2 1 0 x2 x2 x2 0,875 x 2 = 1,75 1 0,75 x 2 = 1,5 1 0,5 x 2 = 1,0 1 0,0 PAREConversões de Base
• Converter 0,874
10, porém...
0,874 x 2 = 1,748 1 0,748 x 2 = 1,496 1 0,496 x 2 = 0,992 0 0,992 x 2 = 1,984 1 0,984 x 2 = 1,968 1 0,968 x 2 = 1,936 1 0,936 x 2 = 1,872 1 0,872 x 2 = 1,744 1 0,744 x 2 = 1,488 1 0,488 x 2 = 0,976 0 0,976 x 2 = 1,952 1 ... Quando isto acaba?0,874
10≈ 0,11011111101
20,87353515625
•A conversão pode ser muito longa ou gerar uma dízima periódica em binário. •Deve-se parar quando o número atingir uma quantidade satisfatória de dígitos.
Conversões de Base
• Converter 178,6
10para hexadecimal (3 casas):
– Parte integral (÷16) – Parte fracionária (x 16) 178 / 16 = 11 e resto 2 11 / 16 = 0 e resto B 0,6 x 16 = 9,6 9 0,6 x 16 = 9,6 9 0,6 x 16 = 9,6 9
178,6
10≈ B2,999
16Conversões de Base
• Conversão binário-hexadecimal
– Cada 4 bits BIN equivalem a um dígito HEX e vv.
0 1 1 0
1 1 1 0
E 5
Binário Hexa 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 Binário Hexa 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F binário hexadecimalConversõ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?
• Exemplos:
– k10 = log10 234 = 2,37 = 3 23410 – k16 = log16 234 = 1,96 = 2 EA16 – k2 = log2 234 = 7,8 = 8 111010102k = log
bN
Conversões de Base
• Qual o maior número representável com k
dígitos na base b?
N
max= b
k– 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 ( = 1111
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?
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
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)
Uma variável inteira possui o valor 4 (0100)
É subtraído 7 deste valor (desloca sentido
anti-horário)
O resultado é 13 (1101)
Adição Subtração
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; N
min = – Nmax
– Existem duas representações para o número zero – Exemplo com 4 bits:
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
111
magnitude0
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
Números Inteiros
Overflow negativo
• Ocorre quando se tenta armazenar um número que é menor que o Nmin • Subtrair 7 de -5 produz um valor incorreto: 6 • Subtrair 4 de 2 produz um valor incorreto: -6 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1111 1110 +0 1 2 3 4 5 6 7 -0 -1 -2 -4 -3 -5 -6 -7 Subtrai 7 soma subtração
Números Inteiros
Overflow positivo
• Ocorre quando se tenta armazenar um número que é maior que o Nmax • Somar 6 a +5 produz um valor incorreto: -3 • Somar 6 a -5 produz um valor incorreto: 3 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1111 1110 +0 1 2 3 4 5 6 7 -0 -1 -2 -4 -3 -5 -6 -7 Somar 6 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
Nmax = (2k – 1) / 2; N
min = – (Nmax + 1)
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úmeros Inteiros
• Complemento-de-dois:
0 0 1 0
Número original =
1 0
Transfere os bits, da direita para a esquerda, até achar o primeiro 1
1 1 1 0
Complemento-de-2 =
+2
10=
Transfere os bits restantes invertidos
-2
10Números Inteiros
• Complemento-de-dois com 1 byte:
0 0 0 0 0 0 1 0
Número original =1 0
1 1 1 1 1 1 1 0
Complemento-de-2 =+2
10 =-2
10 =Números Inteiros
• Represente, em binário, o
complemento-de-dois (em 8 bits) para os seguintes números
decimais:
28 -39 14 -7 -246Números Inteiros
Overflow negativo
• Ocorre quando se tenta armazenar um número que é menor que o Nmin • Subtrair 7 de -3 produz
um valor incorreto: 6 • Mas... subtrair 4 de 2
produz um valor correto: -2 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1111 1110 +0 1 2 3 4 5 6 7 -8 -7 -6 -4 -5 -3 -2 -1 Subtrai 7 soma subtração
Números Inteiros
Overflow positivo
• Ocorre quando se tenta armazenar um número que é maior que o Nmax • Somar 6 a +5 produz um
valor incorreto: -5 • Mas...somar 5 a -3
produz um valor correto: 2 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1111 1110 +0 1 2 3 4 5 6 7 -8 -7 -6 -4 -5 -3 -2 -1 Somar 6 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: 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:
+8.563.000.000.000,00 Torna-se: +8,563 x 1012
Sinal Deslocador Número ponto fixo
Sinal = +
Deslocador = 12
Números Reais
• Exemplo 2:
-0,000000852
Torna-se: -8,52 x 10-7
• Converta para a notação científica:
125.369,458 -589,00008 0,000159
Sinal =
-Deslocador = -7
Números Reais
• A técnica pode ser empregada em números
binários:
1001110000000000,00 Torna-se: 1,00111 x 215
• 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
Sinal = +
Deslocador = 15
Números Reais
• Ponto flutuante em binário:
– 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:
1,00111 x 215
Sinal Expoente Mantissa
Sinal = +
Expoente = 15 Mantissa= 00111
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 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15+7
-7 = 0000 -6 = 0001 -5 = 0010 -4 = 0011 ... 0 = 0111 1 = 1000 ... 14 = 1110 15 = 1111 (bias) Cálculo do bias:2
m-1-1
onde m = número de bitsNú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
S Expoente Mantissa 1 8 23 S Expoente Mantissa 1 11 52 Excesso_127 (32 bits) 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
Números Reais
• Represente o número 17,375
10em 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:
0
1000001100010110000000000000000
Números Reais
• Represente o número -0,0234375
10em
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:1
0111100110000000000000000000000
S E MNú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,111111 2
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: S = 1 E = 10010100 M = 000000001110001000011111
10010100
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,7510Nú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; double y; x = 13.75; y = 7.00220030; }Padrão IEEE 754 para reais de precisão simples e dupla
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
Representação de Texto
Códig
o
ASCI
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
Representação de Texto
• Programa em C para gerar todos os caracteres
imprimíveis da tabela ASCII:
#include <stdio.h> #include <stdlib.h> int main() { int i; for (i = 32; i < 127; i++) { printf( "%c[%d]\n", i , i ); } return 0; } [32] ![33] "[34] #[35] $[36] %[37] &[38] '[39] ([40] )[41] *[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
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
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)
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
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:
Representação de Texto
• Exemplos de caracteres Unicode e suas
representações em bytes (em binário e hexa)
Caractere Binário do code point Binário UTF-8 Hexadecimal
UTF-8 $ U+0024 0100100 00100100 24 ¢ U+00A2 000 10100010 1100001010100010 C2A2 € U+20AC 00100000 10101100 1110001010000010 10101100 E282 AC 𤭢 U+24B62 00010 01001011 01100010 1111000010100100 10101101 10100010 F0A4 ADA2