O sistema de numeração que nós usamos é o sistema decimal. Este sistema chama-se decimal (ou de base 10) porque utiliza 10 símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Com estes 10 símbolos somos capazes de construir números tais como 747. O número 747 tem uma sequência de 3 símbolos (ou algarismos), dois dos quais repetidos (dois setes). No entanto, o primeiro 7 tem um valor diferente do segundo 7. O primeiro vale 700 (7 centenas) mas o segundo já só vale 7 (7 unidades).
747 = 700 + 40 + 7 = 7*102 + 4*101 + 7*100
Resumindo, os algarismos tem um valor diferente consoante a sua posição. No sistema decimal, o peso dos algarismos são potências de 10. Todos nós aprendemos isto na escola primária e nada disto é novidade. Estamos tão habituados a lidar com números que acabamos por manipulá-los muitas vezes por intuição.
Agora imaginen o seguinte. Faz de conta que na escola primária vos tinham ensinado apenas os algarismos 0,1,2. Como é que poderíamos escrever os outros números utilizando apenas estes três símbolos?
Antes de o fazer vamos voltar outra vez ao sistema decimal e ver como é que contamos os números.
0 1 2 3 4 5 6 7 8 9 10 11 12 . . . 19 20 21 . . . 99 100 101 . . .
Como só temos 10 símbolos, quando um algarismo chega a 9, temos de fazer "0 e vai um..." Se na escola primária só nos tivessem ensinado 3 símbolos (0,1,2) seria a mesma coisa: quando o algarismo chegasse a 2 teríamos de fazer "0 e vai um..."
0 1 2 10 11 12 20 21 22 100 101 102 110 111 112 120 121 122 200 201 . . .
O conceito é exactamente o mesmo que existe no sistema decimal. Por exemplo, o número 121 na base três tem 3 símbolos mas o primeiro 1 tem um valor diferente do segundo 1. Com um sistema de base 3, o peso dos algarismos são potências de 3.
121 = 1*32 + 2*31 + 1*30
isto é, o número 121 na base 3 corresponde ao número 9+6+1=16 na base 10.
As pessoas usam o sistema decimal mas podiam utilizar outro sistema qualquer. Aliás, antes de se ter inventado os sistemas de numeração, o ser humano usava um sistema de numeração com um só símbolo (contava as coisas com pauzinhos). Os computadores utilizam o sistema de numeração binário (tem apenas dois símbolos: 0 e 1). De seguida apresenta-se os números de 0 a 20 na base 10, base 3, base 2 e na base 1.
base 10 base 3 base 2 base 1 (pauzinhos) 0 0 0 1 1 1 | 2 2 10 || 3 10 11 ||| 4 11 100 |||| 5 12 101 ||||| 6 20 110 |||||| 7 21 111 ||||||| 8 22 1000 |||||||| 9 100 1001 ||||||||| 10 101 1010 |||||||||| 11 102 1011 ||||||||||| 12 110 1100 |||||||||||| 13 111 1101 ||||||||||||| 14 112 1110 |||||||||||||| 15 120 1111 ||||||||||||||| 16 121 10000 |||||||||||||||| 17 122 10001 ||||||||||||||||| 18 200 10010 |||||||||||||||||| 19 201 10011 ||||||||||||||||||| 20 202 10100 |||||||||||||||||||| . . . . . . . . . . . .
Num computador, a informação é sempre armazenada como uma sequência de dígitos binários. Como tal, toda a informação tem de ser codificada de alguma maneira numa sequência de zeros e uns. Para os números não negativos já vimos como é que isso pode ser feito, mas também se pode fazer a mesma coisa para os números negativos, números reais, caracteres, imagens, e som.
Por exemplo, os caracteres ('a','b','c', ...,'A','B','C,...,'+','-','?',...) costumam ser representados internamente nos computadores usando o código ASCII (American Standard Code for Information Interchange). Cada caracter é codificado usando 8 dígitos binários. De seguida, apresenta-se o código de alguns caracteres:
código código caracter decimal binário -------- ------- --------- . . . . . . . . . # 35 00100011 $ 36 00100100 % 37 00100101 & 38 00100110 ' 39 00100111 ( 40 00101000 ) 41 00101001 * 42 00101010 + 43 00101011 , 44 00101100 - 45 00101101 . 46 00101110 / 47 00101111 0 48 00110000 1 49 00110001 2 50 00110010 3 51 00110011 . . . . . . . . . A 65 01000001 B 66 01000010 C 67 01000011 . . . . . . . . . a 97 01100001 b 98 01100010 c 99 01100011 . . . . . . . . .
O importante a reter é que com uma sequência de N dígitos binários podemos representar 2 elevado a N coisas diferentes. Assim, com 8 dígitos binários podemos representar 28=256 caracteres diferentes.
Tal como existem unidades para medir pesos (miligrama, grama, kilograma,...) e distâncias (milímetro, centímetro, decímetro, metro, ...), também existem unidades para medir informação (bit, byte, kilobyte, megabyte, gigabyte, terabyte, ...).
Um bit é a unidade de informação correspondente a um único dígito binário. Um byte são 8 bits. Um kilobyte são 210 = 1024 bytes. Um megabyte são 220 bytes (aproximadamente 1 milhão de bytes). Um gigabyte são 230 bytes (aproximadamente 1 bilião de bytes). Um terabyte são 240 bytes (aproximadamente 1 trilião de bytes).
Para simplificar, é costume designar kilobyte por Kbyte ou simplesmente KB. O mesmo se passa para megabyte (MB) e gigabyte (GB)
Para terem uma ordem de grandeza, uma disquete pode armazenar 1,4 MB e um disco de um computador que as pessoas tipicamente compram para ter em casa pode armazenar cerca de 6 GB. De agora em diante já não necessitam de ficar assustados quando ouvirem alguém a falar sobre bits e bytes em conversas de café.
A programação de computadores requer um domínio completo de operadores lógicos: conjunção (e), disjunção (ou), negação (não). Os operandos são valores lógicos (verdadeiro ou falso). Representando 1 como verdadeiro e 0 como falso, podemos obter as seguintes tabelas de verdade para as funções e, ou e não (em inglês: and, or, not).
| | x y x e y | x y x ou y | x não x --- --- ------- | --- --- -------- | --- ------- 1 1 1 | 1 1 1 | 1 0 1 0 0 | 1 0 1 | 0 1 0 1 0 | 0 1 1 | 0 0 0 | 0 0 0 | | |
Estas três funções lógicas também são chamadas de funções booleanas (George Boole foi um cientista que inventou uma álgebra, chamada álgebra booleana, que tem como base estas três funções). Com estas 3 funções podemos construir funções mais complexas. Exemplo:
f(x,y) = x e (não y)
A respectiva tabela de verdade é:
x y não y x e (não y) --- --- ------- ----------- 1 1 0 0 1 0 1 1 0 1 0 0 0 0 1 0
O que esta tabela de verdade indica é que (x e (não y)) só é verdade se x for verdade e y for falso. Reparem que x e y são proposições (coisas que podem ter o valor verdadeiro ou falso). Por exemplo, se
x --> o João gosta da Maria y --> a Ana gosta do Pedro
então
não y --> a Ana não gosta do Pedro x e (não y) --> o João gosta da Maria e a Ana não gosta do Pedro