Baixe o app para aproveitar ainda mais
Prévia do material em texto
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 b k-1 + ... + S0 x b 0 + 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 2 1 3 200 10 3 A potência indica o número de casas deslocadas para a esquerda pelo símbolo! xxx 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 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 • 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 22 21 20 0 0 1 1000 000 00 23 1 1 xxxx 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 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 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 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 É 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 16 2 + B x 161 + F x 160 162 161 160 1 B F 100 B0 F xxx 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 22 21 20 0 0 1 23 1 xxxx 8 0 0 1+ + + 9= 10012 = 910 Conversões de Base • Exemplos: 1BF316 para decimal 4096 2816 240 3+ + + 7155= 1BF316 = 715510 162 161 160 B F 3 xxx 163 1 x 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) FQQ0 QQ Dk-1 ... D3 D2 D1 D0 RRRR ... R D = Divide por b Conversões de Base • Exemplo: – Converter 3510 para binário 351784210 10001 1 3510 = 1000112 fonte destino quociente Conversões de Base • Forma mais prática DEC BIN Conversões de Base • Exemplo: – Converter 12610 para hexadecimal 12670 7 E 12610 = 7E16 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 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) F f 0f f D-1 D-2 D-3 ... D-l i ii ... i D = . Multiplica por b Conversões de Base • Converter 0,87510 para binário: 0,875 0,75 0,5 11 0,87510 = 0,1112 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 PARE Conversões de Base • Converter 0,87410, 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,87410 ≈ 0,110111111012 0,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,610 para 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,610 ≈ B2,99916 Conversões de Base • Conversão binário-hexadecimal – Cada 4 bits BIN equivalem a um dígito HEX e vv. 0 1 1 01 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 hexadecimal 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? • Exemplos: – k10 = log10 234 = 2,37 = 3 23410 – k16 = log16 234 = 1,96 = 2 EA16 – k2 = log2 234 = 7,8 = 8 111010102 k = logb N 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 = b k – 1 • Exemplos: – Maior número com 3 dígitos na base 10: Nmax = 10 3 – 1 = 1000 – 1 = 999 – Maior número com 4 dígitos na base 2: Nmax = 2 4 – 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 0 0 0 0 1 1 0 0 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çãoSubtraçã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 = (2 k – 1) / 2; Nmin = – 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 magnitude0sinal Números Inteiros • Tenho 8 bits, qual o maior e menor valor que posso representar com sinal-magnitude? Nmax = (2 8 – 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 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 01111000 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 somasubtraçã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 01111000 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 somasubtraçã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 = (2 k – 1) / 2; Nmin = – (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 0Número original = 1 0 Transfere os bits, da direita para a esquerda, até achar o primeiro 1 1 1 1 0Complemento-de-2 = +210= Transfere os bits restantes invertidos -210= Números Inteiros • Complemento-de-dois com 1 byte: 0 0 0 0 0 0 1 0Número original = 1 0 1 1 1 1 1 1 1 0Complemento-de-2 = +210= -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 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 01111000 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 somasubtraçã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 01111000 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 somasubtraçã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úmero ponto fixo = 8,563 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úmero ponto fixo = 8,52 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 pontofixo 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úmero ponto fixo = 1,00111 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ã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 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 bits 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 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 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 2 4 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: S = 1 E = 10010100 M = 00000000111000100001111 11001010000000000111000100001111 Números Reais 2) S = 1, o número é negativo 3) E = 100101002 = 14810 – 127 = 21 4) M = 000000001110001000011112 M = 1,000000001110001000011112 x 2 21 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; 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 – Há uma versão estendida com 8 bits Representação de Texto C ó d ig o A SC II 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> #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 • 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çãode 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) Caractere Binário do code point Binário UTF-8 Hexadecimal 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 𤭢 U+24B62 00010 01001011 01100010 11110000 10100100 10101101 10100010 F0 A4 AD A2 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:
Compartilhar