Introdução aos caracteres
[ Erros | Código ASCII | Entrada/saída ]
Nesta seção examinaremos resumidamente como utilizar caracteres tanto em C quanto em Python.
Interpretando sequência de bits como número ou caractere
Como citado na seção sobre variáveis, a informação básica nos computadores digitais é uma sequência de bits e o contexto é quem indica como estes bits devem ser interpretados. exemplo, a sequência 1000001 poderia ser interpretada como um valor inteiro (neste caso seria o valor 65 = 1*26+1*20) ou como um caractere (nesse caso a letra A, vide abaixo explicação sobre código ASCII). De modo semelhante, se a sequência 110000 deve ser interpretada como caractere, seria o dígito 0, por outro lado, se for interpretada como inteiro (desconsiderando a questão do sinal), seria o 48 = 1*25+1*24 = 32 + 16). Ou seja, existe uma tabela associando valor numérico e caractere, como explicado na seção abaixo.
Resumidamente o tratamento de dados em um computador digital, se resume à processar sequências de digitos. Assim, ao tentar examinar determinado dado em memória, deve-se saber em que posição da memória o dado está em um quanto bits tem tal dado. A figura ilustra isso, com 3 variáveis de tamanho 1 bytes (a, b e c) e uma ocupando 2 bytes (x). No caso de caracteres (símbolos que devem ser apresentados, como é o caso dos dígitos e das letras), basta existir uma associação (ou mapeamento) entre os bits e o símbolo a ser mostrado. Claro que está associação depende também do tamanho, quanto bits são usados para representar cada símbolo. Na seção seguinte apresento a primeira tabela de associação entre bits e símbolos, a tabela ASCII.
Mas o tratamento de números reais apresentam questões mais difíceis, para começar não existem valores que, por maior que seja a precisão do equipamento, seria impossível representá-los. Um exemplo simples é o valor correspondente à fração 1/3, que é uma dízima periódica, portanto com dígitos (0.3333...). Além disso existe a dificuldade de representar número grande e número muito próximos de zero. O truque usual para simular reais (representação em ponto flutuante), estude esse assunto no texto sobre representação em ponto flutuante.
Código ASCII
Um primeiro padrão para representar os caracteres é o American Standard Code for Information Interchange. O padrão ASCII é bastante antigo, ainda da década de 1960 e por isso utiliza apenas 8 bits para representar todos os possíveis caracteres, o que resultava em um número reduzidíssimo de 512 códigos/símbolos distintos.
Como o código ASCII foi baseado no alfabeto em lingua Inglesa, eles presentam apenas caracteres sem acentos. Usualmente associamos um natural a cada símbolo, assim no ASCII pode-se associar caracteres aos códigos ASCII 0 até 512.
Como exemplos de código ASCII a letra 'A' é associada ao natural 65, o 'B' ao 66 e assim por diante. Do mesmo modo, o 'a' é associada ao natural 97 e o caractere 'z' ao 122. Já o natural 48 é associado do dígito '0', o 49 ao '1' e assim por diante até o 57 associado '9'.
Entrada e saída de caracteres em C e em Python
Como já citado nas outras seções, o contexto deve definir como sequências de bits devem ser tratadas. Para tratar como caractere deve-se indicar isso ao computador de alguma forma. Tanto a linguagem C como a linguagem Python dispõe um tipo especial variável para tratar com caracteres.
Na linguagem C tem o tipo char, que precisa do formatador %c, mas pode-se imprimir uma variável char como inteiro e vice-versa, neste caso usa-se seu código ASCII. Já em Python 2 é preciso de uma função especial para leitura (a raw_input()) e na impressão não é preciso qualquer diferenciação, pois Python aplica um filtro para tratar se a variávem sendo impressa é inteira, flutuante ou caractere. Vide tabela 1 abaixo.
C | Python 2 | Python 3 | |
---|---|---|---|
|
Vale notar que para atribuir constantes do tipo caractere, é necessário que um único caractere esteja cercado por aspas simples. Por exemplo, para atribuir a constante 'a' à uma variável do tipo caractere de nome varc deve-se usar: varc = 'a'; (o finalizador ';' é opcional em Python).
Abaixo um exemplo de código que imprime primeiro o caractere associado ao código ASCII dado e depois o contrário. Ao rodar este código será impresso os caracteres de código 48, 49, 97, 98, 65 e 66, respectivamente '0', '1', 'a', 'b', 'A' e 'B'.
C | Python 2 | |
---|---|---|
|
Leônidas de Oliveira Brandão
http://line.ime.usp.br
Alterações:
2020/08/10: nova versão, sem a parte de "float";
2019/07/31: acerto no formato da página e em várias frases;
2017/05/01: versão inicial