Wednesday 19 July 2017

Fixed point representation binary options


Ponto fixo binário Um sistema binário de ponto fixo é outro exemplo de um sistema numérico arábico. A única distinção de decimal é a raiz. O binário usa uma raiz de 2 em vez de 10. Especificamos a base (base) usando um subscrito no número. De agora em diante, não assumimos uma base de 10. 1001.101 2 1 2 3 0 2 2 0 2 1 1 2 0 1 2 -1 0 2 -2 1 2 -3 Uma maneira fácil de ler binário é trabalhando à esquerda e A partir do ponto binário, duplicando ou reduzindo para metade o valor dos dígitos em cada passo: Os dígitos usados ​​em qualquer sistema árabe sempre variam de 0 a radix-1. O uso de dígitos maiores tornaria possível representar um valor em mais de uma maneira. Por exemplo, se o ponto fixo binário permitiu o uso do dígito 2, então o número dois poderia ser representado como 2 ou 10. 3.7.1.Limitações de Binário Converter 1/10 para binário. Não pode ser feito: como tentar representar 1/3 em decimal. Requer um número infinito de dígitos. Este é um problema para cálculos monetários. Soluções (BCD, centavos) Conversor de ponto fixo Trabalhando com valores de ponto fixo Precisa traduzir fract s entre binário e decimal rapidamente Temos uma ferramenta que torna isso fácil. Esta ferramenta requer JavaScript para ser ativado em seu navegador. Os compiladores oferecem uma variedade de tipos de dados para facilitar o desenvolvimento. Isso evita que os desenvolvedores tenham que fazer conversões manuais e permite que os compiladores otimizem inteligentemente os cálculos de tipo misto. Determinados compiladores do Byte Craft Limited podem usar valores de ponto fixo: valores fracionários entre 0 e 1 de várias precisões e valores de acumuladores com componentes inteiros pequenos e componentes fracionários. Enquanto nossos compiladores entendem ponto fixo, outros aplicativos podem não fazê-lo ainda. A calculadora do Windows, por exemplo, não vai converter porções fracionárias de números. Mesmo JavaScripts próprio tipo de número executa operações binárias somente em 32 bits inteiros. Então nós escrevemos uma ferramenta que lida com TR 18037 ponto fixo fracionário e tipos de acumuladores. Converte entre representações decimais e binárias de valores fracionários e acumuladores. Para usá-lo, digite um número decimal, hexadecimal (0x) ou binário (0b) na parte superior. Selecione entre assinado ou não assinado e clique em um tipo de dados de destino. Se você inseriu um valor decimal, selecione o tipo para o qual deseja converter. O resultado será preenchido ou truncado de acordo. Se você inseriu um valor hexadecimal ou decimal, especifique o tipo do valor de entrada. O resultado será decimal. Clique no botão de tipo repetidamente para alternar entre as representações. Weve encontrado esta ferramenta mais útil para internalizar como as posições de bits de valores de ponto fixo trabalho: a maioria de nós pode fazer dois poderes em nossa cabeça - mas apenas para expoentes positivos Nota: Esta ferramenta realmente executa os cálculos em sua máquina local. Foram enviados um belo presente de Brilliant Bicycles no mês passado, por isso decidimos fazer o único thinggive lógica-lo em uma Caça Scavenger A tensão era alta como as pessoas antecipadas quando a moto seria escondido. Finalmente, às 14h na quarta-feira. A caçada começou e as pessoas começaram a correr pelo edifício em busca da bicicleta. Foi achado rapidamente pelo afortunado Tony Gambino. Obrigado, Brilhante, pela bela moto, e parabéns Tony Na semana passada, o Diretor de Criação, Alvaro Sotomayor comemorou seu 20º aniversário de trabalhar na WK Amsterdam. Descrito como um festival de um homem, um antidepressivo andando e um homem que fala em emoções, lvaro é, sem dúvida, a alma da agência. Para marcar seu aniversário nós jogamos-lhe uma festa surpresa maciça, que começou no jardim, continuou em nosso barco da agência e terminou com dançar a noite afastado em uma festa temático tropical em Amsterdams Pllek. Foram pia coladas, gigante bananas infláveis ​​e surpresa família e amigos de todo o mundo. Tudo para honrar o nosso amado Alvaro. Mas isso não é tudo. Ao longo de seus vinte anos, Alvaro teve um impacto significativo dentro da agência e Amsterdams mais ampla cena criativa, que firmemente o estabeleceu como uma figura de proa e embaixador da indústria criativa da cidade. Fundação WKs incubadora programa O Kennedys, tornando-se o primeiro não-Holandês criativo publicidade nele para ser introduzido em ADCNs prestigiado Salão de Honras e usando sua arte para ajudar a proibição de touradas na Espanha, são apenas algumas das suas muitas realizações. Por isso, o nomeamos para o Prêmio Andreas, uma honra oficial da Câmara Municipal de Amsterdã, concedida a indivíduos por realizações excepcionais no domínio do esporte, arte, política, mídia ou educação na cidade de Amsterdã, com influência demonstrada além da cidade e das fronteiras nacionais. Em uma última surpresa, Alvaro foi apresentado com a medalha Andreas em Pllek pelo vereador do Município de Amsterdã, Pieter Litjens. Uma vez que ele percebeu que o prêmio era de verdade e Pieter não era um stripper Alvaro tinha isso a dizer: Me humilha ser reconhecido oficialmente com este prêmio e por viver meu lema diário: Live by love. Amor muda um dia mundano em um dia vale a pena estar vivo para. Quero agradecer a minha família e meus amigos pela minha festa de aniversário de 20 anos e para reverter os papéis de um dia. Eu senti o amor Quero mais de Alvaro Abaixo está um trecho do e-mail que ele enviou ao redor do escritório em seu Amsterversary e antes que ele sabia o que estava na loja para ele mais tarde no dia Era setembro de 1995, quando eu voei do aeroporto de Maui , Para LAX e de lá para Amsterdã para entrevistar em uma agência de lançamento americana que introduz Nike para o continente europeu. Como era minha primeira entrevista de trabalho oficial eu usei meu terno de veludo verde de três peças super e um bronzeado tão profundo como Jay-Z. I chegou à pitoresca cidade de Amsterdã em um dos mais glorioso verão ensolaradas dias. Ele foi 28 graus fora portanto, talvez veludo wasnt a melhor escolha de guarda-roupa. Mas a minha outra opção foi algum californiano bowling traje então eu fui para a escolha segura. Vinte anos mais tarde, hoje, o sol ainda brilha e minha vida é incrível. Estar em uma agência onde o lema é andar estúpido todos os dias você pode imaginar eu me senti em casa. E eu ainda faço, diariamente. Eu ando em estúpido e eu ainda me apaixono por este lugar e todo mundo nele. Eu me relaciono com Dori em Finding Nemo ou goldfish. Eu vou e volta este lugar pensando é um oceano. Estou surpreso como pouco mudou. E como nossas tradições persistem. Mas heck algumas coisas mudaram temos um barco E um bar e ping pong torneios Este lugar é incrível. Este lugar realmente traz o melhor em nós. Estou animado para escrever isso novamente em 2035. Acho que podemos fazer as pessoas acreditam que há esperança no mundo e convencê-los com os nossos sorrisos. Na quinta-feira, 24 de setembro, WiedenKennedy, juntamente com um punhado de outros patrocinadores locais, organizou um mini-con três em Portland, Oregon (EUA). . O evento de dia inteiro consistiu em keynotes, painéis, networking, uma sessão de ioga e, claro, coquetéis. Clique aqui para uma visão mais detalhada da formação de oradores e participantes fantásticos e inspiradores. Meron Medhanie, estrategista do WK, reflete sobre o dia. Eles me vêem. 8211 Jamie Curl Confiar em sua viagem, individualidade e seu gênio, como Intisar Abioto disse poderosamente, é um pouco mais fácil de fazer quando você é visto, ouvido e compreendido. Mas quando as pessoas reconhecem a sua sorte, em vez de seu gênio, ele apaga completamente o seu talento e trabalho duro, fazendo você se sentir como um destinatário do sucesso, em vez de um criador. (Sarah Shapiro, cineasta, diretora e criadora de Lifetime8217s Unreal) Sarah Shapiro compartilhou isso com vigor e paixão como ela bateu em um monte de temas abordados na primeira 3 Mini Conferência em Portland. O primeiro ser, nunca subestime o poder que uma pessoa tem para fazer uma mudança. Ou como Kat Gordon disse, 8220Se algo está quebrado no mundo, você pode muito bem ser a pessoa para corrigi-lo. E isso é o que ela se propôs a fazer. Kat Gordon fundou a 3 Conferência, estabelecendo uma comunidade de mulheres incríveis e manbassadors em 2012, depois de saber que percentagem representou o número de diretores criativos femininos em nossa indústria. Desde que a organização se lançou há quatro anos, o número de directores criativos femininos aumentou de 3 para 11. Mas ficou claro durante todo o dia que ainda há muito trabalho a ser feito. Como Chelsea Vandiver disse melhor, as lutas estavam lidando com são reais. Tentando superar a barreira da cuteness a ser levada a sério, e esta idéia de matrydom para o trabalho, juntamente com uma extrema culpa por não ser suficiente para o seu trabalho, família e você levou a inúmeras conversas de como você ficar nele quando Parece que tudo está empilhado. A resposta: Se você se sentir como o seu o que você tem que fazer, é a sua paixão, então você não pode desistir. É o momento em que você solta uma fantasia e se inclina para a que você está destinado, essa descoberta acontece. E realmente, aquele é o espaço que nós jogamos em o dia inteiro. (Intisar Abioto, Fotógrafo, Dançarino, Escritor, Explorador, The Black Portlanders) Ouvimos histórias poderosas sobre o que as pessoas estão criando e como as pessoas estão mudando o jogo. Mulheres como Mira Kaddoura e Sarah Shapiro que são intencionais em quem eles contratam, em vez de contratar o cara que se parece com o último cara que contratamos. Mulheres corajosas que nos desafiaram a falar quando alguém descreve uma mulher como insensível ou emocional, e em vez disso dizer coisas como 8220hmm ela realmente pensa em seus pés e é bastante apaixonado. (DeAngelo Raines, Co-Fundador Diretor de Arte de Serviço e Caridade Stratos, CEO / Fundador do Serviço) Tanto quanto todos nós prosperamos em um ambiente de apoio, Tig Notaro lembrou-nos que a última coisa que você quer é um ambiente seguro. Estar em um ambiente de 100 nutrição, você não vai realmente crescer. Então, como fazemos um equilíbrio Im não realmente certo. Podemos começar com a criação de um espaço onde todos possam compartilhar sua perspectiva. E abraçando essa estranheza, como Tig tão graciosamente faz em sua posição. Reconhecendo que eles não conseguem isso, vamos discutir isso e ter confiança que podemos passar por conversas difíceis. Ou como Charity Stratos compartilhado, estando bem com 8220healthy conflito para encontrar um novo terreno comum. Dan Wieden acrescentou que somos mais poderosos quando diversos. A melhor maneira de resolver um problema é quando há várias perspectivas na sala. A diversidade é a melhor coisa que pode acontecer à criatividade. Para colocar isso em perspectiva, Kat Gordon perguntou à platéia: "Vemos 3.000 anúncios por dia que moldam como vemos as coisas em todas as facetas da vida. Queremos que ele venha de uma perspectiva ou queremos que ela seja representativa da América A WK está se associando com a 3 Conferência para trazer um dia inspirador de badass líderes criativas para falar, colaborar e mentor na PNCA em 24 de setembro. Tig Notaro , Stand-up comic e estrela de HBOs Tig Notaro: Boyish Girl Interrompido. Será o título, ao lado de Sarah Shapiro, cineasta, diretora e criadora de Lifetimes UnREAL. A conferência abrangerá uma variedade de indústrias criativas de comunicações para entretenimento, alimentos, tecnologia e doers / makers. Cada alto-falante vai explorar como eles chegaram a onde estão, e onde eles querem ir a partir daqui. O evento acontece no espaço novo do super-rad dos PNCAs situado em 511 NW Broadway de 8:30 am - 5:30 pm. Obtenha seus ingressos e detalhes aqui: bit. ly/3percentpdx It8217s setembro, de modo que significa it8217s Bike Commute Challenge mês aqui em Oregon Uma das muitas vantagens de trabalhar em WiedenKennedy é que nós apoiamos nossos viajantes de bicicleta. Portland, afinal de contas. A aliança de transporte de bicicletas. Um grupo de defesa de moto sem fins lucrativos com sede em Portland, coloca o Bike Commute Challenge em Setembro, durante o qual as empresas competem para ter a maior percentagem de deslocamentos por bicicleta. WK é sempre um corredor na competição (we8217ll pegá-lo este ano, Reed College). Nós usamos o mês de setembro para mostrar o nosso amor extra de bicicleta comutadores, organizando festas e workshops, pequenos-almoços semanais e prêmios de sorteio. (Crédito de cartaz para Garrett Close do WK Studio) Introdução à Representação de Pontos Fixos Na vida real, lidamos com números reais - números com parte fracionária. Computadores mais modernos têm suporte nativo (hardware) para números de ponto flutuante. No entanto, o uso de ponto flutuante não é necessariamente a única maneira de representar números fracionários. Este artigo descreve a representação de ponto fixo de números reais. O uso do tipo de dados de ponto fixo é amplamente utilizado em aplicações de processamento digital de sinais (DSP) e de jogos, onde o desempenho às vezes é mais importante do que a precisão. Como veremos mais adiante, a aritmética de ponto fixo é muito mais rápida do que a aritmética de ponto flutuante. Lembre-se que um número binário: representa o valor: 1 2 5 1 2 4 0 2 3 1 2 2 0 2 1 1 2 0 Agora, se dividir o número 53 por 2, sabemos que o resultado deve ser 26,5. No entanto, como podemos representá-lo se tivéssemos apenas representações inteiras A chave para representar números fracionários, como 26,5 acima, é o conceito de ponto binário. Um ponto binário é como o ponto decimal em um sistema decimal. Ele age como um divisor entre o número inteiro ea parte fracionária de um número. Em um sistema decimal, um ponto decimal denota a posição em um número que o coeficiente deve multiplicar por 10 0 1. Por exemplo, no número 26.5, o coeficiente 6 tem um peso de 10 0 1. Mas o que acontece com o 5 para O direito do ponto decimal Sabemos por nossa experiência, que ele carrega um peso de 10 -1. Sabemos que o número 26.5 quot representa o valor quotrento seis e meio porque 2 10 1 6 10 0 5 10 -1 26.5 O mesmo conceito de ponto decimal pode ser aplicado à nossa representação binária, fazendo um ponto quotbinal. Como no sistema decimal, um ponto binário representa o coeficiente do termo 2 0 1. Todos os dígitos (ou bits) à esquerda do ponto binário carregam um peso de 2 0. 2 1. 2 2. e assim por diante. Dígitos (ou bits) à direita do ponto binário leva um peso de 2 -1. 2-2. 2 -3. e assim por diante. Por exemplo, o número: representa o valor: Agora, lembre-se na classe, discutimos deslocando um inteiro para a direita por 1 bit posição é equivalente a dividir o número por 2. No caso de inteiro, uma vez que não temos uma parte fracionária , Simplesmente não podemos representar o dígito à direita de um ponto binário, tornando este processo de deslocamento uma divisão inteira. No entanto, é simplesmente uma limitação de representações inteiras de número binário. Em geral, matematicamente, dada uma posição de ponto binário fixa, deslocando o padrão de bits de um número para a direita por 1 bit sempre divide o número por 2. Similarmente, deslocando um número para a esquerda por 1 bit multiplica o número por 2. A Processo de deslocamento acima é a chave para compreender a representação do número de ponto fixo. Para representar um número real em computadores (ou qualquer hardware em geral), podemos definir um tipo de número de ponto fixo simplesmente fixando implicitamente o ponto binário para estar em alguma posição de um número. Iremos simplesmente aderir a esta convenção implícita quando representamos números. Para definir um tipo de ponto fixo conceitualmente, tudo o que precisamos são dois parâmetros: largura da representação de número e posição de ponto binário dentro do número. Usaremos a notação fixedltw, bgt para o restante deste artigo, onde w denota o número de bits Usado como um todo (a Largura de um número), e b denota a posição de contagem de ponto binário a partir do bit menos significativo (contando a partir de 0). Por exemplo, fixedlt8,3gt denota um número de ponto fixo de 8 bits, dos quais 3 bits mais à direita são fracionários. Portanto, o padrão de bits: Olhando para esta tabela, podemos então facilmente perceber que podemos representar o número -2.5 com padrão de bits quot1011quot, se assumimos o ponto binário está na posição 1. Agora, você deve achar que os números de ponto fixo são De fato, um parente próximo da representação de inteiros. Os dois só difere na posição de ponto binário. De fato, você pode até considerar a representação de números inteiros como um caso quotípico de números de ponto fixo, onde o ponto binário está na posição 0. Todas as operações aritméticas que um computador pode operar em inteiro podem, portanto, ser aplicadas a números de ponto fixo também. Portanto, o benefício da aritmética de ponto fixo é que eles são tão diretos e eficientes quanto a aritmética de inteiros em computadores. Podemos reutilizar todo o hardware construído para a aritmética de números inteiros para realizar aritmética de números reais usando a representação de ponto fixo. Em outras palavras, aritmética de ponto fixo vem de graça em computadores. A desvantagem do número de ponto fixo é, obviamente, a perda de alcance e precisão quando comparado com representações de número de ponto flutuante. Por exemplo, em uma representação fixa de 8,1gt, nossa parte fracionária é apenas precisa para um quantum de 0,5. Não podemos representar números como 0,75. Podemos representar 0,75 com fixedlt8,2gt. Mas então nós perdemos a escala na parte inteira. C não tem quottypequot nativo para número de ponto fixo. No entanto, devido à natureza da representação de ponto fixo, simplesmente não precisa de um. Lembre-se de todos os aritmética em números de ponto fixo são os mesmos que números inteiros, podemos simplesmente reutilizar o tipo integer int em C para executar aritmética de ponto fixo. A posição de ponto binário só importa em casos quando eu imprimo isto em tela ou executo aritmética com quottypequot diferente (como quando adicionando int a fixedlt32,6gt). Ponto fixo é uma forma simples, mas muito poderosa para representar números fracionários no computador. Ao reutilizar todos os circuitos aritméticos inteiros de um computador, a aritmética de ponto fixo é ordens de grandeza mais rápidas do que a aritmética de ponto flutuante. Esta é a razão pela qual ele está sendo usado em muitos jogos e aplicativos DSP. Por outro lado, ela não tem o alcance e a precisão que a representação de número em ponto flutuante oferece. Tutorial sobre a representação de dados Inteiros, números de ponto flutuante e caracteres Sistemas numéricos Os seres humanos utilizam sistemas numéricos decimais (base 10) e duodécimais (base 12) para contagem e medições (Provavelmente porque temos 10 dedos e dois dedos grandes). Os computadores usam o sistema de números binários (base 2), pois são feitos de componentes digitais binários (conhecidos como transistores) operando em dois estados - ligado e desligado. Na computação, também usamos sistemas de número hexadecimal (base 16) ou octal (base 8), como uma forma compacta para representar números binários. Decimal (Base 10) Número Sistema de números decimais tem dez símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9, chamados dígitos s. Ele usa a notação posicional. Ou seja, o dígito menos significativo (dígito mais à direita) é da ordem de 100 (unidades ou uns), o segundo dígito à direita é da ordem de 101 (dezenas), o terceiro dígito à direita é A ordem de 102 (centenas), e assim por diante. Por exemplo, vamos denotar um número decimal com um sufixo opcional D se surgir ambigüidade. Sistema de Número Binário (Base 2) O sistema de Número Binário tem dois símbolos: 0 e 1, chamados bits. É também uma notação posicional. Por exemplo, vamos denotar um número binário com um sufixo B. Algumas linguagens de programação denotam números binários com o prefixo 0b (por exemplo, 0b1001000), ou o prefixo b com os bits citados (por exemplo, b10001111). Um dígito binário é chamado de bit. Oito bits é chamado de um byte (por 8-bit unidade Provavelmente porque 82 3). Sistema de número hexadecimal (Base 16) O sistema numérico hexadecimal usa 16 símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F, chamados hex dígitos . É uma notação posicional. Por exemplo, vamos denotar um número hexadecimal (em suma, hex) com um sufixo H. Algumas linguagens de programação denotar números hexadecimais com prefixo 0x (por exemplo 0x1A3C5F), ou prefixo x com o dígito hexadecimal cotado (por exemplo, xC3A4D98B). Cada dígito hexadecimal também é chamado de dígito hexadecimal. A maioria das linguagens de programação aceita letras minúsculas de a para f, bem como letras maiúsculas de A a F. Computadores usa sistema binário em suas operações internas, como eles são construídos a partir de componentes eletrônicos binários digitais. Entretanto, escrever ou ler uma seqüência longa de bits binários é complicado e sujeito a erros. O sistema hexadecimal é usado como uma forma compacta ou abreviada para bits binários. Cada dígito hexadecimal é equivalente a 4 bits binários, ou seja, taquigrafia para 4 bits, da seguinte forma: Substitua cada dígito hexadecimal pelos 4 bits equivalentes, por exemplo, Conversão de Binário para Hexadecimal A partir do bit mais à direita (bit menos significativo) , Substitua cada grupo de 4 bits pelo dígito hexadecimal equivalente (preencha os bits mais à esquerda com zero, se necessário), por exemplo, É importante observar que o número hexadecimal fornece uma forma compacta ou abreviação para representar bits binários. Conversão de Base r para Decimal (Base 10) Dado um n de base de números - d número: dn-1 dn-2 dn-3. D3 d2 d1 d0 (base r), o equivalente decimal é dado por: Conversão de Decimal (Base 10) para Base r Use repetido divisão / restante. Por exemplo, o procedimento acima é realmente aplicável à conversão entre qualquer 2 sistemas de base. Por exemplo, Conversão Geral entre 2 Sistemas Base com Parte Fraccional Separe as partes integrais e fracionárias. Para a parte integral, divida pela raiz alvo repetidamente, e colete o ramainder na ordem inversa. Para a parte fracionária, multiplique a parte fracionária pelo radical alvo repetidamente e colete a parte integral na mesma ordem. Converta os seguintes números decimais em números binários e hexadecimais: 108 4848 9000 Converta os seguintes números binários em números hexadecimais e decimais: 1000011000 10000000 101010101010 Converta os seguintes números hexadecimais em números binários e decimais: ABCDE 1234 80F Converta os seguintes números decimais em números binários e hexadecimais: Seguintes números decimais em binário equivalente: 19.25D 123.456D Respostas: Você poderia usar a Calculadora do Windows (calc. exe) para realizar a conversão do sistema de número, definindo-o para o modo científico. (Executar quotcalcquot rArr Selecionar quotViewquot menu rArr Escolha quotProgrammerquot ou quotScientificquot mode.) 1101100B. 1001011110000B. 10001100101000B. 6CH. 12F0H. 2328H. 218H. 80 H. AAAH. 536D. 128D. 2730D. 10101011110011011110B. 1001000110100B. 100000001111B. 703710D. 4660D. 2063D. Computer Memory amp Representação de dados O computador usa um número fixo de bits para representar um dado, que pode ser um número, um caractere ou outros. Um local de armazenamento de n-bits pode representar até 2 n entidades distintas. Por exemplo, um local de memória de 3 bits pode conter um destes oito padrões binários: 000. 001. 010. 011. 100. 101. 110. ou 111. Assim, pode representar no máximo 8 entidades distintas. Você pode usá-los para representar números 0 a 7, números 8881 a 8888, caracteres A a H, ou até 8 tipos de frutas como maçã, laranja, banana ou até 8 tipos de animais como leão, tigre, etc. Inteiros, Por exemplo, pode ser representada em 8 bits, 16 bits, 32 bits ou 64 bits. Você, como programador, escolhe um bit-length apropriado para seus inteiros. Sua escolha irá impor restrição ao intervalo de inteiros que podem ser representados. Além do comprimento de bit, um número inteiro pode ser representado em vários esquemas de representação, e. Sem assinatura versus inteiros assinados. Um inteiro não assinado de 8 bits tem um intervalo de 0 a 255, enquanto um inteiro assinado de 8 bits tem um intervalo de -128 a 127 - ambos representando 256 números distintos. É importante notar que um local de memória do computador simplesmente armazena um padrão binário. Depende inteiramente de você, como programador, decidir como esses padrões devem ser interpretados. Por exemplo, o padrão binário de 8 bits quot0100 0001Bquot pode ser interpretado como um inteiro não assinado 65. ou um caractere ASCII A. ou alguma informação secreta conhecida apenas por você. Em outras palavras, você deve primeiro decidir como representar um pedaço de dados em um padrão binário antes que os padrões binários façam sentido. A interpretação do padrão binário é chamada de representação ou codificação de dados. Além disso, é importante que os esquemas de representação de dados sejam acordados por todas as partes, isto é, os padrões industriais precisam ser formulados e seguidos de forma direta. Uma vez que você decidiu sobre o esquema de representação de dados, certas restrições, em particular, a precisão eo intervalo serão impostas. Assim, é importante compreender a representação dos dados para escrever programas corretos e de alto desempenho. Rosette Stone e o Decipherment de Hieroglyphs egípcios Hieroglyphs egípcios (next-to-left) foram usados ​​pelos antigos egípcios desde 4000BC. Infelizmente, desde 500AD, ninguém podia mais ler os antigos hieróglifos egípcios, até a re-descoberta da Pedra Rosette em 1799 pela tropa de Napoleão (durante a invasão egípcia de Napoleão) perto da cidade de Rashid (Rosetta) no Delta do Nilo. A pedra de Rosetta (à esquerda) é inscrita com um decreto em 196BC em nome do rei Ptolomeu V. O decreto aparece em três scripts: o texto superior é hieróglifos egípcios antigos. A parte média Script Demotic, eo mais baixo Grego Antigo. Porque ele apresenta essencialmente o mesmo texto em todos os três scripts, e grego antigo ainda poderia ser entendido, ele forneceu a chave para a decifração dos hieróglifos egípcios. A moral da história é a menos que você conheça o esquema de codificação, não há nenhuma maneira que você pode decodificar os dados. Referência e imagens: Wikipedia. Integer Representation Integers são números inteiros ou números de ponto fixo com o ponto radix fixado após o bit menos significativo. Eles são contraste com números reais ou números de ponto flutuante. Onde a posição do ponto radix varia. É importante observar que números inteiros e números de ponto flutuante são tratados de forma diferente nos computadores. Eles têm representação diferente e são processados ​​de forma diferente (por exemplo, os números de ponto flutuante são processados ​​no chamado processador de ponto flutuante). Números de ponto flutuante serão discutidos mais tarde. Os computadores usam um número fixo de bits para representar um número inteiro. Os comprimentos de bits comumente usados ​​para inteiros são 8-bit, 16-bit, 32-bit ou 64-bit. Além dos comprimentos de bits, existem dois esquemas de representação para inteiros: Inteiros não assinados. Pode representar zero e números inteiros positivos. Inteiros assinados. Pode representar zero, positivo e negativo inteiros. Três esquemas de representação foram propostos para inteiros assinados: Representação de sinal-magnitude 1s Representação de complemento 2s Representação de complemento Você, como programador, precisa decidir o esquema de comprimento e representação de bits para seus inteiros, dependendo dos requisitos de suas aplicações. Suponha que você precisa de um contador para contar uma pequena quantidade de 0 a 200, você pode escolher o esquema inteiro de 8 bits não assinado, pois não há números negativos envolvidos. N-bit Unsigned Integers Unsigned inteiros podem representar zero e inteiros positivos, mas não inteiros negativos. O valor de um inteiro não assinado é interpretado como quot a magnitude do seu padrão binário subjacente quot. Exemplo 1: Suponha que n 8 e o padrão binário seja 0100 0001B. O valor deste inteiro não assinado é 1 x 20 1 x 26 65D. Exemplo 2: Suponha que n 16 eo padrão binário é 0001 0000 0000 1000B. O valor deste inteiro não assinado é 1 x 23 1 x 225 4104D. Exemplo 3: Suponha que n 16 eo padrão binário seja 0000 0000 0000 0000B. O valor desse inteiro não assinado é 0. Um padrão n-bit pode representar 2 n inteiros distintos. Um inteiro não assinado de n bits pode representar inteiros de 0 a (2 n) -1. Como tabulado abaixo: Inteiros Assinados Inteiros assinados podem representar zero, inteiros positivos, bem como números inteiros negativos. Três esquemas de representação estão disponíveis para inteiros assinados: Representação de sinal-magnitude 1s Representação de complemento 2s Representação de complemento Em todos os três esquemas acima, o bit mais significativo (msb) é chamado de bit de sinal. O bit de sinal é usado para representar o sinal do inteiro - com 0 para inteiros positivos e 1 para inteiros negativos. A magnitude do inteiro, entretanto, é interpretada diferentemente em esquemas diferentes. N-bit Signos Inteiros na Representação de Magnitude de Sinal Em representação de magnitude de sinal: O bit mais significativo (msb) é o bit de sinal. Com valor de 0 representando inteiro positivo e 1 representando número inteiro negativo. Os restantes n-1 bits representam a magnitude (valor absoluto) do inteiro. O valor absoluto do inteiro é interpretado como quotthe magnitude do padrão binário (n -1) - bit. Exemplo 1. Suponha que n 8 ea representação binária seja 0 100 0001B. O bit de sinal é 0 rArr positivo O valor absoluto é 100 0001B 65D Portanto, o inteiro é 65D Exemplo 2. Suponha que n 8 ea representação binária seja 1 000 0001B. O bit de sinal é 1 rArr negativo O valor absoluto é 000 0001B 1D Portanto, o inteiro é -1D Exemplo 3. Suponha que n 8 ea representação binária seja 0 000 0000B. O bit de sinal é 0 rArr positivo O valor absoluto é 000 0000B 0D Portanto, o inteiro é 0D Exemplo 4. Suponha que n 8 ea representação binária seja 1 000 0000B. O bit de sinal é 1 rArr negativo O valor absoluto é 000 0000B 0D Portanto, o inteiro é -0D As desvantagens da representação de magnitude de sinal são: Existem duas representações (0000 0000B e 1000 0000B) para o número zero, o que poderia levar a ineficiência e confusão. Os números inteiros positivos e negativos precisam ser processados ​​separadamente. N-bit Signos Inteiros em 1s Representação de Complemento Em 1s representação complementar: Novamente, o bit mais significativo (msb) é o bit de sinal. Com valor de 0 representando inteiros positivos e 1 representando números inteiros negativos. Os restantes n-1 bits representam a magnitude do inteiro, como segue: para inteiros positivos, o valor absoluto do inteiro é igual a quoturna magnitude do padrão binário (n-1) - bit. Para números inteiros negativos, o valor absoluto do inteiro é igual a quotra magnitude do complemento (inverso) do padrão binário (n-1) - bit (daqui chamado 1s complemento). Exemplo 1. Suponha que n 8 ea representação binária 0 100 0001B. O bit de sinal é 0 rArr positivo O valor absoluto é 100 0001B 65D Portanto, o inteiro é 65D Exemplo 2. Suponha que n 8 ea representação binária 1 000 0001B. O bit de sinal é 1 rArr negativo O valor absoluto é o complemento de 000 0001B. 111 1110B 126D Assim, o inteiro é -126D Exemplo 3. Suponha que n 8 e a representação binária 0 000 0000B. O bit de sinal é 0 rArr positivo O valor absoluto é 000 0000B 0D Portanto, o inteiro é 0D Exemplo 4. Suponha que n 8 ea representação binária 1 111 1111B. O bit de sinal é 1 rArr negativo O valor absoluto é o complemento de 111 1111B. 000 0000B 0D Assim, o inteiro é -0D Novamente, os inconvenientes são: Existem duas representações (0000 0000B e 1111 1111B) para zero. Os inteiros positivos e inteiros negativos precisam ser processados ​​separadamente. N-bit Signos Inteiros em 2s Representação de Complemento Em 2s representação complementar: Novamente, o bit mais significativo (msb) é o bit de sinal. Com valor de 0 representando inteiros positivos e 1 representando números inteiros negativos. Os restantes n-1 bits representam a magnitude do inteiro, como segue: para inteiros positivos, o valor absoluto do inteiro é igual a quoturna magnitude do padrão binário (n-1) - bit. Para números inteiros negativos, o valor absoluto do inteiro é igual a quoturna magnitude do complemento do padrão binário (n -1) - bit mais um quot (daqui chamado complemento 2s). Exemplo 1. Suponha que n 8 ea representação binária 0 100 0001B. O bit de sinal é 0 rArr positivo O valor absoluto é 100 0001B 65D Portanto, o inteiro é 65D Exemplo 2. Suponha que n 8 ea representação binária 1 000 0001B. O bit de sinal é 1 rArr negativo O valor absoluto é o complemento de 000 0001B mais 1. i. e. 111 1110B 1B 127D Assim, o número inteiro é -127D Exemplo 3. Suponha que n 8 ea representação binária 0 000 0000B. O bit de sinal é 0 rArr positivo O valor absoluto é 000 0000B 0D Portanto, o inteiro é 0D Exemplo 4. Suponha que n 8 ea representação binária 1 111 1111B. O bit de sinal é 1 rArr negativo O valor absoluto é o complemento de 111 1111B mais 1. ie 000 0000B 1B 1D Portanto, o inteiro é -1D Computadores usam 2s Representação de Complemento para Inteiros Assinados Discutimos três representações para inteiros assinados: magnitude assinada, Complemento 1s e complemento 2s. Os computadores usam o complemento 2s para representar inteiros assinados. Isso ocorre porque: Existe apenas uma representação para o número zero no complemento 2s, em vez de duas representações em sinal-magnitude e 1s complementar. Os números inteiros positivos e negativos podem ser tratados juntos em adição e subtração. A subtração pode ser realizada usando o quotaddition logic. Exemplo 1: Adição de Dois Números Positivos: Suponha que n8, 65D 5D 70D Exemplo 2: Subtração é tratada como Adição de um número positivo e um número negativo: Suponha que n8, 5D-5D 65D (-5D) 60D Exemplo 3: Adição de Dois números inteiros negativos: Suponha que n8, -65D-5D (-5D) -70D Por causa da precisão fixa (ou seja, número fixo de bits), um n-bit 2s complementado assinado inteiro tem um certo intervalo. Por exemplo, para n 8. o intervalo de 2s complementar inteiros assinados é de -128 a 127. Durante a adição (e subtração), é importante verificar se o resultado excede esse intervalo, ou seja, se ocorreu overflow ou underflow. Exemplo 5: Desbordamento: Suponha que n8, -125D - 5D -130D (underflow - abaixo da faixa) O diagrama a seguir explica como o complemento 2s funciona . Ao reorganizar a linha numérica, os valores de -128 a 127 são representados contíguos ignorando o bit de transporte. Intervalo de n-bit 2s Complemento Inteiros Assinados Um n-bit 2s complementado inteiro assinado pode representar números inteiros de -2 (n -1) a 2 (n -1) -1. Como tabulado. Observe que o esquema pode representar todos os inteiros dentro do intervalo, sem qualquer intervalo. Em outras palavras, não há números inteiros em falta no intervalo suportado. (263) -1 (9,223,372,036,854,775,807) (18 dígitos) Decodificação 2s Números de complemento Verifique o bit de sinal (indicado como S). Se S0. O número é positivo eo seu valor absoluto é o valor binário dos restantes n -1 bits. Se S1. O número é negativo. Você poderia quotinvert os n -1 bits e mais 1quot para obter o valor absoluto do número negativo. Alternativamente, você pode digitalizar os n-1 bits remanescentes da direita (bit menos significativo). Procure a primeira ocorrência de 1. Virar todos os bits à esquerda da primeira ocorrência de 1. O padrão invertido dá o valor absoluto. Por exemplo, computadores Big Endian vs. Little Endian Modern armazenam um byte de dados em cada endereço de memória ou localização, isto é, memória endereçável byte. Um inteiro de 32 bits é, portanto, armazenado em 4 endereços de memória. O termoquotEndianquot refere-se à ordem de armazenamento de bytes na memória do computador. No esquema quotBig Endianquot, o byte mais significativo é armazenado primeiro no menor endereço de memória (ou big in first), enquanto quotLettle Endianquot armazena os bytes menos significativos no menor endereço de memória. Por exemplo, o inteiro de 32 bits 12345678H (2215053170 10) é armazenado como 12H 34H 56H 78H em big endian e 78H 56H 34H 12H em little endian. Um inteiro de 16 bits 00H 01H é interpretado como 0001H em big endian e 0100H como little endian. Exercício (Representação Inteira) Quais são os intervalos de 8 bits, 16 bits, 32 bits e 64 bits inteiro, em quotunsignedquot e quotsignedquot representação Dê o valor de 88. 0 1.127 e 255 em 8 bits Representação não assinada. Dê o valor de 88.-88. -1. 0, 1 -128. E 127 em 8 bits 2s complementam a representação assinada. Dê o valor de 88. -88. -1. 0, 1 -127. E 127 em representação de magnitude de sinal de 8 bits. Dê o valor de 88. -88. -1. 0. 1. -127 e 127 em 8 bits 1s representação do complemento. Para fazer mais. Respostas O intervalo de inteiros n-bit não assinados é 0, 2n-1. O intervalo de n-bit 2s complemento assinado inteiro é -2 (n-1), 2 (n-1) -1 88 (0101 1000). 0 (0000 0000). 1 (0000 0001). 127 (0111 1111). 255 (1111 1111). 88 (0101 1000). -88 (1010 1000). -1 (1111 1111). 0 (0000 0000). 1 (0000 0001). -128 (1000 0000). 127 (0111 1111). 88 (0101 1000). -88 (1101 1000). -1 (1000 0001). 0 (0000 0000 ou 1000 0000). 1 (0000 0001). -127 (1111 1111). 127 (0111 1111). 88 (0101 1000). -88 (1010 0111). -1 (1111 1110). 0 (00000000 ou 11111111). 1 (0000 0001). -127 (1000 0000). 127 (0111 1111). Representação numérica de ponto flutuante Um número de ponto flutuante (ou número real) pode representar um valor muito grande (1,23 x 1088) ou um valor muito pequeno (1,23 x 10-88). Poderia também representar um número negativo muito grande (-1,23 x 1088) e um número negativo muito pequeno (-1,23 x 1088), bem como zero, como ilustrado: Um número de ponto flutuante é tipicamente expresso na notação científica, com uma fracção (F ), E um expoente (E) de uma determinada raiz (r), na forma de FtimesrE. Os números decimais usam radix de 10 (Ftimes10E) enquanto números binários usam radix de 2 (Ftimes2E). A representação do número de ponto flutuante não é única. Por exemplo, o número 55.66 pode ser representado como 5.566 x 101. 0,5566 x 102. 0,05566 x 103. e assim por diante. A parte fracionária pode ser normalizada. Na forma normalizada, existe apenas um dígito diferente de zero antes do ponto de raiz. Por exemplo, o número decimal 123.4567 pode ser normalizado como 1.234567 × 102. O número binário 1010.1011B pode ser normalizado como 1,0101011Bx23. É importante notar que números de ponto flutuante sofrem perda de precisão quando representados com um número fixo de bits (por exemplo, 32 bits ou 64 bits). Isso ocorre porque há um número infinito de números reais (mesmo dentro de uma pequena faixa de 0,0 a 0,1). Por outro lado, um padrão binário de n bits pode representar um número finito de 2 n números distintos. Assim, nem todos os números reais podem ser representados. A aproximação mais próxima será usada em vez disso, resultou em perda de precisão. Também é importante notar que a aritmética de números flutuantes é muito menos eficiente do que a aritmética de números inteiros. Poderia ser acelerar com um chamado co-processador de ponto flutuante dedicado. Portanto, use inteiros se seu aplicativo não exigir números de ponto flutuante. Nos computadores, os números de ponto flutuante são representados na notação científica da fração (F) e do expoente (E) com uma base de 2, na forma de Ftimes2E. Tanto E como F podem ser positivos ou negativos. Os computadores modernos adotam o padrão IEEE 754 para representar números de ponto flutuante. Existem dois esquemas de representação: 32 bits de precisão única e 64 bits de precisão dupla. IEEE-754 Números de ponto flutuante de precisão simples de 32 bits Em representação de ponto flutuante de uma única precisão de 32 bits: O bit mais significativo é o bit de sinal (S), com 0 para números positivos e 1 para números negativos. Os 8 bits seguintes representam o expoente (E). Os restantes 23 bits representam a fracção (F). Formulário normalizado Vamos ilustrar com um exemplo, suponha que o padrão de 32 bits é 1 1000 0001 011 0000 0000 0000 0000 0000. com: S 1 E 1000 0001 F 011 0000 0000 0000 0000 0000 Na forma normalizada. A fracção real é normalizada com uma derivação implícita 1 na forma de 1.F. Neste exemplo, a fração real é 1,011 0000 0000 0000 0000 0000 1 12-2 12-3 1,375D. O bit de sinal representa o sinal do número, com S0 para positivo e S1 para número negativo. Neste exemplo com S1. Este é um número negativo, isto é -1,375D. Na forma normalizada, o expoente real é E-127 (o chamado excesso-127 ou bias-127). Isso ocorre porque precisamos representar expoente positivo e negativo. Com um E de 8 bits, variando de 0 a 255, o esquema de excesso-127 poderia fornecer um expoente real de -127 a 128. Neste exemplo, E-127129-1272D. Assim, o número representado é -1.37522-5.5D. Formulário Normalizado A forma normalizada tem um problema sério, com um 1 implícito para a fração, não pode representar o número zero Convencer-se nesta forma Des-normalizada foi concebido para representar zero e outros números. Para E0. Os números estão na forma des-normalizada. Um 0 implícito inicial (em vez de 1) é usado para a fração eo expoente real é sempre -126. Assim, o número zero pode ser representado com E0 e F0 (porque 0.02-1260). Também podemos representar números positivos e negativos muito pequenos na forma des-normalizada com E0. For example, if S1. E0. and F011 0000 0000 0000 0000 0000. The actual fraction is 0.01112-212-30.375D. Since S1. it is a negative number. With E0. the actual exponent is -126. Hence the number is -0.3752-126 -4.4times10-39. which is an extremely small negative number (close to zero). Summary In summary, the value ( N ) is calculated as follows: For 1 le E le 254, N (-1)S times 1.F times 2(E-127). These numbers are in the so-called normalized form. The sign-bit represents the sign of the number. Fractional part ( 1.F ) are normalized with an implicit leading 1. The exponent is bias (or in excess) of 127. so as to represent both positive and negative exponent. The range of exponent is -126 to 127 . For E 0, N (-1)S times 0.F times 2(-126). These numbers are in the so-called denormalized form. The exponent of 2-126 evaluates to a very small number. Denormalized form is needed to represent zero (with F0 and E0 ). It can also represents very small positive and negative number close to zero. For E 255. it represents special values, such as plusmnINF (positive and negative infinity) and NaN (not a number). This is beyond the scope of this article. Example 1: Suppose that IEEE-754 32-bit floating-point representation pattern is 0 10000000 110 0000 0000 0000 0000 0000 . Example 2: Suppose that IEEE-754 32-bit floating-point representation pattern is 1 01111110 100 0000 0000 0000 0000 0000 . Example 3: Suppose that IEEE-754 32-bit floating-point representation pattern is 1 01111110 000 0000 0000 0000 0000 0001 . Example 4 (De-Normalized Form): Suppose that IEEE-754 32-bit floating-point representation pattern is 1 00000000 000 0000 0000 0000 0000 0001 . Exercises (Floating-point Numbers) Compute the largest and smallest positive numbers that can be represented in the 32-bit normalized form. Compute the largest and smallest negative numbers can be represented in the 32-bit normalized form. Repeat (1) for the 32-bit denormalized form. Repeat (2) for the 32-bit denormalized form. Hints: Largest positive number: S0. E1111 1110 (254). F111 1111 1111 1111 1111 1111 . Smallest positive number: S0. E0000 00001 (1). F000 0000 0000 0000 0000 0000 . Same as above, but S1 . Largest positive number: S0. E0. F111 1111 1111 1111 1111 1111 . Smallest positive number: S0. E0. F000 0000 0000 0000 0000 0001 . Same as above, but S1 . Notes For Java Users You can use JDK methods Float. intBitsToFloat(int bits) or Double. longBitsToDouble(long bits) to create a single-precision 32-bit float or double-precision 64-bit double with the specific bit patterns, and print their values. For examples, IEEE-754 64-bit Double-Precision Floating-Point Numbers The representation scheme for 64-bit double-precision is similar to the 32-bit single-precision: The most significant bit is the sign bit ( S ), with 0 for positive numbers and 1 for negative numbers. The following 11 bits represent exponent ( E ). The remaining 52 bits represents fraction ( F ). The value ( N ) is calculated as follows: Normalized form: For 1 le E le 2046, N (-1)S times 1.F times 2(E-1023) . Denormalized form: For E 0, N (-1)S times 0.F times 2(-1022). These are in the denormalized form. For E 2047. N represents special values, such as plusmnINF (infinity), NaN (not a number). More on Floating-Point Representation There are three parts in the floating-point representation: The sign bit ( S ) is self-explanatory (0 for positive numbers and 1 for negative numbers). For the exponent ( E ), a so-called bias (or excess ) is applied so as to represent both positive and negative exponent. The bias is set at half of the range. For single precision with an 8-bit exponent, the bias is 127 (or excess-127). For double precision with a 11-bit exponent, the bias is 1023 (or excess-1023). The fraction ( F ) (also called the mantissa or significand ) is composed of an implicit leading bit (before the radix point) and the fractional bits (after the radix point). The leading bit for normalized numbers is 1 while the leading bit for denormalized numbers is 0. Normalized Floating-Point Numbers In normalized form, the radix point is placed after the first non-zero digit, e, g. 9.8765D10-23D. 1.001011B211B. For binary number, the leading bit is always 1, and need not be represented explicitly - this saves 1 bit of storage. In IEEE 754s normalized form: For single-precision, 1 le E le 254 with excess of 127. Hence, the actual exponent is from -126 to 127. Negative exponents are used to represent small numbers (lt 1.0) while positive exponents are used to represent large numbers (gt 1.0). N (-1)S times 1.F times 2(E-127) For double-precision, 1 le E le 2046 with excess of 1023. The actual exponent is from -1022 to 1023. and N (-1)S times 1.F times 2(E-1023) Take note that n-bit pattern has a finite number of combinations ( 2n ), which could represent finite distinct numbers. It is not possible to represent the infinite numbers in the real axis (even a small range says 0.0 to 1.0 has infinite numbers). That is, not all floating-point numbers can be accurately represented. Instead, the closest approximation is used, which leads to loss of accuracy . The minimum and maximum normalized floating-point numbers are: 0000 0001H 0 00000000 00000000000000000000001B E 0, F 00000000000000000000001B D(min) 0.0. 1 times 2-126 1 times 2-23 times 2-126 2-149 (asymp1.4 times 10-45) 007F FFFFH 0 00000000 11111111111111111111111B E 0, F 11111111111111111111111B D(max) 0.1. 1 times 2-126 (1-2-23)times2-126 (asymp1.1754942 times 10-38) 0000 0000 0000 0001H D(min) 0.0. 1 times 2-1022 1 times 2-52 times 2-1022 2-1074 (asymp4.9 times 10-324) 001F FFFF FFFF FFFFH D(max) 0.1. 1 times 2-1022 (1-2-52)times2-1022 (asymp4.4501477170144023 times 10-308) Special Values Zero . Zero cannot be represented in the normalized form, and must be represented in denormalized form with E0 and F0. There are two representations for zero: 0 with S0 and -0 with S1 . Infinity . The value of infinity (e. g. 1/0 ) and - infinity (e. g. -1/0 ) are represented with an exponent of all 1s ( E 255 for single-precision and E 2047 for double-precision), F0. and S0 (for INF ) and S1 (for - INF ). Not a Number (NaN) . NaN denotes a value that cannot be represented as real number (e. g. 0/0 ). NaN is represented with Exponent of all 1s ( E 255 for single-precision and E 2047 for double-precision) and any non-zero fraction. Character Encoding In computer memory, character are quotencodedquot (or quotrepresentedquot) using a chosen quotcharacter encoding schemesquot (aka quotcharacter setquot, quotcharsetquot, quotcharacter mapquot, or quotcode pagequot). For example, in ASCII (as well as Latin1, Unicode, and many other character sets): code numbers 65D (41H) to 90D (5AH) represents A to Z. respectively. code numbers 97D (61H) to 122D (7AH) represents a to z. respectivamente. code numbers 48D (30H) to 57D (39H) represents 0 to 9. respectively. It is important to note that the representation scheme must be known before a binary pattern can be interpreted. Por exemplo. the 8-bit pattern quot 0100 0010B quot could represent anything under the sun known only to the person encoded it. The most commonly-used character encoding schemes are: 7-bit ASCII (ISO/IEC 646) and 8-bit Latin-x (ISO/IEC 8859-x) for western european characters, and Unicode (ISO/IEC 10646) for internationalization (i18n). A 7-bit encoding scheme (such as ASCII) can represent 128 characters and symbols. An 8-bit character encoding scheme (such as Latin-x) can represent 256 characters and symbols whereas a 16-bit encoding scheme (such as Unicode UCS-2) can represents 65,536 characters and symbols. 7-bit ASCII Code (aka US-ASCII, ISO/IEC 646, ITU-T T.50) ASCII (American Standard Code for Information Interchange) is one of the earlier character coding schemes. ASCII is originally a 7-bit code. It has been extended to 8-bit to better utilize the 8-bit computer memory organization. (The 8th-bit was originally used for parity check in the early computers.) Code numbers 32D (20H) to 126D (7EH) are printable (displayable) characters as tabulated: ISO/IEC-8859 has 16 parts. Besides the most commonly-used Part 1, Part 2 is meant for Central European (Polish, Czech, Hungarian, etc), Part 3 for South European (Turkish, etc), Part 4 for North European (Estonian, Latvian, etc), Part 5 for Cyrillic, Part 6 for Arabic, Part 7 for Greek, Part 8 for Hebrew, Part 9 for Turkish, Part 10 for Nordic, Part 11 for Thai, Part 12 was abandon, Part 13 for Baltic Rim, Part 14 for Celtic, Part 15 for French, Finnish, etc. Part 16 for South-Eastern European. Other 8-bit Extension of US-ASCII (ASCII Extensions) Beside the standardized ISO-8859-x, there are many 8-bit ASCII extensions, which are not compatible with each others. ANSI (American National Standards Institute) (aka Windows-1252 . or Windows Codepage 1252): for Latin alphabets used in the legacy DOS/Windows systems. It is a superset of ISO-8859-1 with code numbers 128 (80H) to 159 (9FH) assigned to displayable characters, such as quotsmartquot single-quotes and double-quotes. A common problem in web browsers is that all the quotes and apostrophes (produced by quotsmart quotesquot in some Microsoft software) were replaced with question marks or some strange symbols. It it because the document is labeled as ISO-8859-1 (instead of Windows-1252), where these code numbers are undefined. Most modern browsers and e-mail clients treat charset ISO-8859-1 as Windows-1252 in order to accommodate such mis-labeling. EBCDIC (Extended Binary Coded Decimal Interchange Code): Used in the early IBM computers. Unicode (aka ISO/IEC 10646 Universal Character Set) Before Unicode, no single character encoding scheme could represent characters in all languages. For example, western european uses several encoding schemes (in the ISO-8859-x family). Even a single language like Chinese has a few encoding schemes (GB2312/GBK, BIG5). Many encoding schemes are in conflict of each other, i. e. the same code number is assigned to different characters. Unicode aims to provide a standard character encoding scheme, which is universal, efficient, uniform and unambiguous. Unicode standard is maintained by a non-profit organization called the Unicode Consortium ( www. unicode. org ). Unicode is an ISO/IEC standard 10646. Unicode is backward compatible with the 7-bit US-ASCII and 8-bit Latin-1 (ISO-8859-1). That is, the first 128 characters are the same as US-ASCII and the first 256 characters are the same as Latin-1. Unicode originally uses 16 bits (called UCS-2 or Unicode Character Set - 2 byte), which can represent up to 65,536 characters. It has since been expanded to more than 16 bits, currently stands at 21 bits. The range of the legal codes in ISO/IEC 10646 is now from U0000H to U10FFFFH (21 bits or about 2 million characters), covering all current and ancient historical scripts. The original 16-bit range of U0000H to UFFFFH (65536 characters) is known as Basic Multilingual Plane (BMP), covering all the major languages in use currently. The characters outside BMP are called Supplementary Characters . which are not frequently-used. Unicode has two encoding schemes: UCS-2 (Universal Character Set - 2 Byte): Uses 2 bytes (16 bits), covering 65,536 characters in the BMP. BMP is sufficient for most of the applications. UCS-2 is now obsolete. UCS-4 (Universal Character Set - 4 Byte): Uses 4 bytes (32 bits), covering BMP and the supplementary characters. UTF-8 (Unicode Transformation Format - 8-bit) The 16/32-bit Unicode (UCS-2/4) is grossly inefficient if the document contains mainly ASCII characters, because each character occupies two bytes of storage. Variable-length encoding schemes, such as UTF-8, which uses 1-4 bytes to represent a character, was devised to improve the efficiency. In UTF-8, the 128 commonly-used US-ASCII characters use only 1 byte, but some less-commonly characters may require up to 4 bytes. Overall, the efficiency improved for document containing mainly US-ASCII texts. The transformation between Unicode and UTF-8 is as follows: 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx In UTF-8, Unicode numbers corresponding to the 7-bit ASCII characters are padded with a leading zero thus has the same value as ASCII. Hence, UTF-8 can be used with all software using ASCII. Unicode numbers of 128 and above, which are less frequently used, are encoded using more bytes (2-4 bytes). UTF-8 generally requires less storage and is compatible with ASCII. The drawback of UTF-8 is more processing power needed to unpack the code due to its variable length. UTF-8 is the most popular format for Unicode. UTF-8 uses 1-3 bytes for the characters in BMP (16-bit), and 4 bytes for supplementary characters outside BMP (21-bit). The 128 ASCII characters (basic Latin letters, digits, and punctuation signs) use one byte. Most European and Middle East characters use a 2-byte sequence, which includes extended Latin letters (with tilde, macron, acute, grave and other accents), Greek, Armenian, Hebrew, Arabic, and others. Chinese, Japanese and Korean (CJK) use three-byte sequences. All the bytes, except the 128 ASCII characters, have a leading 1 bit. In other words, the ASCII bytes, with a leading 0 bit, can be identified and decoded easily. Example . (Unicode: 60A8H 597DH) UTF-16 (Unicode Transformation Format - 16-bit) UTF-16 is a variable-length Unicode character encoding scheme, which uses 2 to 4 bytes. UTF-16 is not commonly used. The transformation table is as follows: Same as UCS-2 - no encoding 000uuuuu zzzzyyyy yyxxxxxx (uuuuune0) 110110ww wwzzzzyy 110111yy yyxxxxxx (wwww uuuuu - 1) Take note that for the 65536 characters in BMP, the UTF-16 is the same as UCS-2 (2 bytes). However, 4 bytes are used for the supplementary characters outside the BMP. For BMP characters, UTF-16 is the same as UCS-2. For supplementary characters, each character requires a pair 16-bit values, the first from the high-surrogates range, ( uD800-uDBFF ), the second from the low-surrogates range ( uDC00-uDFFF ). UTF-32 (Unicode Transformation Format - 32-bit) Same as UCS-4, which uses 4 bytes for each character - unencoded. Formats of Multi-Byte (e. g. Unicode) Text Files Endianess (or byte-order). For a multi-byte character, you need to take care of the order of the bytes in storage. In big endian . the most significant byte is stored at the memory location with the lowest address (big byte first). In little endian . the most significant byte is stored at the memory location with the highest address (little byte first). For example, (with Unicode number of 60A8H ) is stored as 60 A8 in big endian and stored as A8 60 in little endian. Big endian, which produces a more readable hex dump, is more commonly-used, and is often the default. BOM (Byte Order Mark). BOM is a special Unicode character having code number of FEFFH. which is used to differentiate big-endian and little-endian. For big-endian, BOM appears as FE FFH in the storage. For little-endian, BOM appears as FF FEH. Unicode reserves these two code numbers to prevent it from crashing with another character. Unicode text files could take on these formats: Big Endian: UCS-2BE, UTF-16BE, UTF-32BE. Little Endian: UCS-2LE, UTF-16LE, UTF-32LE. UTF-16 with BOM. The first character of the file is a BOM character, which specifies the endianess. For big-endian, BOM appears as FE FFH in the storage. For little-endian, BOM appears as FF FEH . UTF-8 file is always stored as big endian. BOM plays no part. However, in some systems (in particular Windows), a BOM is added as the first character in the UTF-8 file as the signature to identity the file as UTF-8 encoded. The BOM character ( FEFFH ) is encoded in UTF-8 as EF BB BF. Adding a BOM as the first character of the file is not recommended, as it may be incorrectly interpreted in other system. You can have a UTF-8 file without BOM. Formats of Text Files Line Delimiter or End-Of-Line (EOL). Sometimes, when you use the Windows NotePad to open a text file (created in Unix or Mac), all the lines are joined together. This is because different operating platforms use different character as the so-called line delimiter (or end-of-line or EOL). Two non-printable control characters are involved: 0AH (Line-Feed or LF) and 0DH (Carriage-Return or CR). Windows/DOS uses OD0AH (CRLF or quot rn quot) as EOL. Unix and Mac use 0AH (LF or quot n quot) only. End-of-File (EOF). TODO Windows CMD Codepage Character encoding scheme (charset) in Windows is called codepage . In CMD shell, you can issue command quotchcpquot to display the current codepage, or quotchcp codepage-numberquot to change the codepage. The default codepage 437 (used in the original DOS) is an 8-bit character set called Extended ASCII . which is different from Latin-1 for code numbers above 127. Codepage 1252 (Windows-1252), is not exactly the same as Latin-1. It assigns code number 80H to 9FH to letters and punctuation, such as smart single-quotes and double-quotes. A common problem in browser that display quotes and apostrophe in question marks or boxes is because the page is supposed to be Windows-1252, but mislabelled as ISO-8859-1. For internationalization and chinese character set: codepage 65001 for UTF8, codepage 1201 for UCS-2BE, codepage 1200 for UCS-2LE, codepage 936 for chinese characters in GB2312, codepage 950 for chinese characters in Big5. Chinese Character Sets Unicode supports all languages, including asian languages like Chinese (both simplified and traditional characters), Japanese and Korean (collectively called CJK). There are more than 20,000 CJK characters in Unicode. Unicode characters are often encoded in the UTF-8 scheme, which unfortunately, requires 3 bytes for each CJK character, instead of 2 bytes in the unencoded UCS-2 (UTF-16). Worse still, there are also various chinese character sets, which is not compatible with Unicode: GB2312/GBK: for simplified chinese characters. GB2312 uses 2 bytes for each chinese character. The most significant bit (MSB) of both bytes are set to 1 to co-exist with 7-bit ASCII with the MSB of 0. There are about 6700 characters. GBK is an extension of GB2312, which include more characters as well as traditional chinese characters. BIG5: for traditional chinese characters BIG5 also uses 2 bytes for each chinese character. The most significant bit of both bytes are also set to 1. BIG5 is not compatible with GBK, i. e. the same code number is assigned to different character. For example, the world is made more interesting with these many standards: Notes for Windows CMD Users. To display the chinese character correctly in CMD shell, you need to choose the correct codepage, e. g. 65001 for UTF8, 936 for GB2312/GBK, 950 for Big5, 1201 for UCS-2BE, 1200 for UCS-2LE, 437 for the original DOS. You can use command quot chcp quot to display the current code page and command quot chcp codepagenumber quot to change the codepage. You also have to choose a font that can display the characters (e. g. Courier New, Consolas or Lucida Console, NOT Raster font). Collating Sequences (for Ranking Characters) A string consists of a sequence of characters in upper or lower cases, e. g. quotapplequot. quotBOYquot. quotCatquot. In sorting or comparing strings, if we order the characters according to the underlying code numbers (e. g. US-ASCII) character-by-character, the order for the example would be quotBOYquot. quotapplequot. quotCatquot because uppercase letters have a smaller code number than lowercase letters. This does not agree with the so-called dictionary order . where the same uppercase and lowercase letters have the same rank. Another common problem in ordering strings is quot10quot (ten) at times is ordered in front of quot1quot to quot9quot . Hence, in sorting or comparison of strings, a so-called collating sequence (or collation ) is often defined, which specifies the ranks for letters (uppercase, lowercase), numbers, and special symbols. There are many collating sequences available. It is entirely up to you to choose a collating sequence to meet your applications specific requirements. Some case-insensitive dictionary-order collating sequences have the same rank for same uppercase and lowercase letters, i. e. A. a rArr B. b rArr. rArr Z. z. Some case-sensitive dictionary-order collating sequences put the uppercase letter before its lowercase counterpart, i. e. A rArr B rArr C. rArr a rArr b rArr c. Typically, space is ranked before digits 0 to 9. followed by the alphabets. Collating sequence is often language dependent, as different languages use different sets of characters (e. g. aacute, eacute, a, alpha) with their own orders. For Java Programmers - java. nio. Charset JDK 1.4 introduced a new java. nio. charset package to support encoding/decoding of characters from UCS-2 used internally in Java program to any supported charset used by external devices. Example . The following program encodes some Unicode texts in various encoding scheme, and display the Hex codes of the encoded byte sequences. For Java Programmers - char and String The char data type are based on the original 16-bit Unicode standard called UCS-2. The Unicode has since evolved to 21 bits, with code range of U0000 to U10FFFF. The set of characters from U0000 to UFFFF is known as the Basic Multilingual Plane ( BMP ). Characters above UFFFF are called supplementary characters. A 16-bit Java char cannot hold a supplementary character. Recall that in the UTF-16 encoding scheme, a BMP characters uses 2 bytes. It is the same as UCS-2. A supplementary character uses 4 bytes. and requires a pair of 16-bit values, the first from the high-surrogates range, ( uD800-uDBFF ), the second from the low-surrogates range ( uDC00-uDFFF ). In Java, a String is a sequences of Unicode characters. Java, in fact, uses UTF-16 for String and StringBuffer. For BMP characters, they are the same as UCS-2. For supplementary characters, each characters requires a pair of char values. Java methods that accept a 16-bit char value does not support supplementary characters. Methods that accept a 32-bit int value support all Unicode characters (in the lower 21 bits), including supplementary characters. This is meant to be an academic discussion. I have yet to encounter the use of supplementary characters Displaying Hex Values amp Hex Editors At times, you may need to display the hex values of a file, especially in dealing with Unicode characters. A Hex Editor is a handy tool that a good programmer should possess in his/her toolbox. There are many freeware/shareware Hex Editor available. Try google quotHex Editorquot. I used the followings: NotePad with Hex Editor Plug-in: Open-source and free. You can toggle between Hex view and Normal view by pushing the quotHquot button. PSPad: Freeware. You can toggle to Hex view by choosing quotViewquot menu and select quotHex Edit Modequot. TextPad: Shareware without expiration period. To view the Hex value, you need to quotopenquot the file by choosing the file format of quotbinaryquot (). UltraEdit: Shareware, not free, 30-day trial only. Let me know if you have a better choice, which is fast to launch, easy to use, can toggle between Hex and normal view, free. The following Java program can be used to display hex code for Java Primitives (integer, character and floating-point): In Eclipse, you can view the hex code for integer primitive Java variables in debug mode as follows: In debug perspective, quotVariablequot panel Select the quotmenuquot (inverted triangle) Java Java Preferences. Primitive Display Options Check quotDisplay hexadecimal values (byte, short, char, int, long)quot. Summary - Why Bother about Data Representation Integer number 1. floating-point number 1.0 character symbol 1. and string quot1quot are totally different inside the computer memory. You need to know the difference to write good and high-performance programs. In 8-bit signed integer . integer number 1 is represented as 00000001B . In 8-bit unsigned integer . integer number 1 is represented as 00000001B . In 16-bit signed integer . integer number 1 is represented as 00000000 00000001B . In 32-bit signed integer . integer number 1 is represented as 00000000 00000000 00000000 00000001B . In 32-bit floating-point representation . number 1.0 is represented as 0 01111111 0000000 00000000 00000000B. i. e. S0. E127. F0 . In 64-bit floating-point representation . number 1.0 is represented as 0 01111111111 0000 00000000 00000000 00000000 00000000 00000000 00000000B. i. e. S0. E1023. F0 . In 8-bit Latin-1, the character symbol 1 is represented as 00110001B (or 31H ). In 16-bit UCS-2, the character symbol 1 is represented as 00000000 00110001B . In UTF-8, the character symbol 1 is represented as 00110001B . If you quotaddquot a 16-bit signed integer 1 and Latin-1 character 1 or a string quot1quot, you could get a surprise. Exercises (Data Representation) For the following 16-bit codes: Give their values, if they are representing: a 16-bit unsigned integer a 16-bit signed integer two 8-bit unsigned integers two 8-bit signed integers a 16-bit Unicode characters two 8-bit ISO-8859-1 characters. Ans: (1) 42. 32810 (2) 42. -32726 (3) 0. 42 128. 42 (4) 0. 42 -128. 42 (5) (6) NUL. PAD. . REFERENCES amp RESOURCES (Floating-Point Number Specification) IEEE 754 (1985), quotIEEE Standard for Binary Floating-Point Arithmeticquot. (ASCII Specification) ISO/IEC 646 (1991) (or ITU-T T.50-1992), quotInformation technology - 7-bit coded character set for information interchangequot. (Latin-I Specification) ISO/IEC 8859-1, quotInformation technology - 8-bit single-byte coded graphic character sets - Part 1: Latin alphabet No. 1quot. (Unicode Specification) ISO/IEC 10646, quotInformation technology - Universal Multiple-Octet Coded Character Set (UCS)quot. Unicode Consortium www. unicode. org . Last modified: January, 2014

No comments:

Post a Comment