01000010 01111001 01110100 01100101 01110011 00101100 00100000 01101110 01110101 01101101 01100101 01110010 01101111 01110011 00100000 01100101 00100000 01100011 01100001 01110010 01100001 01100011 01110100 01100101 01110010 01100101 01110011 00001010
A memória de qualquer computador é uma sequência de bytes. Cada byte é uma sequência de 8 bits (dígitos binários) e portanto tem 28 = 256 possíveis valores:
00000000 00000001 00000010 ⋮ 11111110 11111111
Uma sequência de bytes consecutivos na memória pode ser interpretada de três diferentes maneiras:
Este capítulo discute essas três interpretações.
Sumário:
Toda sequência de bits pode ser vista como um número natural em notação binária: o número natural é a soma das potências de 2 que correspondem aos bits 1. Por exemplo, a sequência 1101 representa o número 23 + 22 + 20, igual a 13. A sequência 1111 representa 23 + 22 + 21 + 20, igual a 15.
Toda sequência de s bytes — ou seja, 8s bits — representa um número natural no intervalo fechado
Se s = 1, por exemplo, o intervalo vai de 0 a 28−1, isto é, de 0 a 255. Se s = 2, o intervalo vai até 216−1, isto é, até 65535. Se s = 4, o intervalo vai até 232−1, isto é, até 4294967295.
Exemplo. Para que o exemplo caiba na página, vamos tomar s = 1 e fingir que cada byte tem apenas 4 bits. Uma sequência de 4 bits representa, em notação binária, um número no intervalo 0 . . 24−1:
byte | número |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | 10 |
1011 | 11 |
1100 | 12 |
1101 | 13 |
1110 | 14 |
1111 | 15 |
Seja s um número natural não nulo. Toda sequência de s bytes — ou seja, 8s bits — pode ser interpretada como um número inteiro no intervalo fechado
−28s−1 . . 28s−1−1 .
Se s = 1, por exemplo, esse intervalo vai de −27 a 27−1, isto é, de −128 a 127. Se s = 2, o intervalo vai de −215 a 215−1, isto é, de −32768 a 32767. Se s = 4, o intervalo vai de −231 a 231−1, isto é, de −2147483648 a 2147483647.
Qual o número inteiro que uma dada sequência de 8s bits representa? Comece por interpretar a sequência como um número natural em notação binária. Digamos que esse número é n. Se o primeiro bit da sequência é 0, ela representa o inteiro positivo n. Se o primeiro bit é 1, a sequência representa o inteiro estritamente negativo n − 28s. Essa maneira de representar inteiros é conhecida como notação complemento-de-dois (= two's complement).
Exemplo. Para que o exemplo caiba na página, vamos tomar s = 1 e fingir que cada byte tem apenas 4 bits. Uma tal sequência de bits representa um número inteiro no intervalo −23 . . 23−1 :
byte | inteiro |
---|---|
0000 | +0 |
0001 | +1 |
0010 | +2 |
0011 | +3 |
0100 | +4 |
0101 | +5 |
0110 | +6 |
0111 | +7 |
1000 | −8 |
1001 | −7 |
1010 | −6 |
1011 | −5 |
1100 | −4 |
1101 | −3 |
1110 | −2 |
1111 | −1 |
Um caractere é qualquer símbolo tipográfico (letra, dígito, sinal de pontuação, etc.). Veja alguns exemplos de caracteres: @, A, B, C, a, b, c, +, -, *, /, =, Á, Ã, à, ç, é, ô, ≤, ≠ . (Não confunda o conceito de caractere com o tipo char da linguagem C.)
Neste capítulo, tratamos apenas do pequeno conjunto de 128 caracteres conhecido como alfabeto ASCII. Esse conjunto inclui os caracteres
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
e mais alguns (o primeiro caractere da lista acima é um espaço em branco).
Todo byte cujo primeiro bit é 0 representa um caractere do alfabeto ASCII. A correspondência entre os bytes e os caracteres é definida pela tabela ASCII. Eis uma pequena amostra da tabela:
byte | caractere |
---|---|
00111111 | ? |
01000000 | @ |
01000001 | A |
01000010 | B |
01000011 | C |
01100001 | a |
01100010 | b |
01100011 | c |
01111110 | ~ |
É cômodo usar atalhos verbais ao falar de caracteres ASCII.
Por exemplo, em vez de dizer
o caractere A
podemos dizer
o caractere 65
,
pois o byte que corresponde a A
na tabela ASCII representa 65 em notação binária.
Caracteres de controle.
Além dos noventa e cinco caracteres normais
,
o alfabeto ASCII contém
trinta e três
caracteres de controle.
Esses caracteres não são símbolos tipográficos como os outros
e por isso precisam ser indicados por uma notação especial:
uma barra invertida seguida de um dígito ou letra.
Eis os caracteres de controle mais usados:
byte | caractere | nome |
---|---|---|
00000000 | \0 | caractere nulo (null) |
00001001 | \t | tabulação horizontal (tab) |
00001010 | \n | fim de linha (newline) |
00001011 | \v | tabulação vertical |
00001100 | \f | fim de página (new page) |
00001101 | \r | carriage return |
O caractere \0 é usado para marcar o fim de uma string e não ocupa espaço algum ao ser exibido; o caractere \n marca o fim de uma linha de texto e produz uma mudança de linha ao ser exibido; o caractere \f marca o fim de uma página; e assim por diante. Embora o espaço em branco não seja um caractere de controle, ele pode ser indicado por \ (barra invertida seguida de um espaço).
Os caracteres \ , \t, \n, \v, \f e \r são conhecidos coletivamente como brancos (= white-spaces). Muitas funções das bibliotecas padrão tratam todos os brancos como se fossem espaços.
Caracteres não-ASCII. O alfabeto ASCII não contém letras com sinais diacríticos, como Á, Ã, à, ç, é, ô, etc. Cada uma dessas letras é representada por dois ou mais bytes consecutivos num esquema de codificação conhecido como UTF-8. Trataremos disso no capítulo Strings e cadeias de caracteres e no capítulo Unicode e UTF-8.
Um byte tem 8 bits..
Resposta: A tabela ISO-LATIN-1 (também conhecida com ISO-8859-1) faz exatamente isso! Infelizmente, ela caiu em desuso há algum tempo.