O sistema de contagem binário utiliza apenas 2 valores (0 e 1) para representação numérica. Existem diferentes sistemas de contagem. O sistema ternário (0, 1 e 2), o decimal (0, 1, 2, 3, 4, 5, 6, 7 ,8 e 9) que é o que utilizamos no dia a dia ou o hexadecimal (0, 1, 2, 3, 4, 5, 6, 7 ,8 ,9, A, B, C, D, E e F) são exemplos. É importante conhecermos o sistema binário pois ele é a base da linguagem de máquina. Aqui, vamos ver como fazer a contagem em binário e como podemos fazer conversão entre binário e decimal e vice-versa.
Vamos fazer uma analogia com a contagem decimal. Com 10 algarismos, sempre que termina as possibilidades de incremento, nós adicionamos mais um algarismo na contagem. Vejamos a sequência:
n | possível incrementar à direita? | ||
---|---|---|---|
0 | inicia com 0 a direita | ||
1 | sim | ||
2 | sim | ||
... | |||
9 | não | ||
1 | 0 | inicia com 0 a direita | |
1 | 1 | sim | |
1 | 2 | sim | |
... | |||
1 | 9 | não | |
2 | 0 | inicia com 0 a direita | |
2 | 1 | sim | |
2 | 2 | sim | |
... | |||
9 | 8 | sim | |
9 | 9 | não | |
1 | 0 | 0 | inicia com 0 e 0 a direita |
Com o sistema binário iremos fazer o mesmo. No entanto, só podemos incrementar até o 1, e não o 9:
n | possível incrementar à direita? | |||
---|---|---|---|---|
0 | inicia com 0 a direita | |||
1 | não | |||
1 | 0 | inicia com 0 a direita | ||
1 | 1 | não | ||
1 | 0 | 0 | inicia com 0 a direita | |
1 | 0 | 1 | sim | |
1 | 1 | 0 | sim | |
1 | 1 | 1 | não | |
1 | 0 | 0 | 0 | inicia com 0 a direita |
Como converter um valor binário para decimal? Podemos utilizar uma tabela com * bits (1 byte):
Posição | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
Valor | b*2^7 | b*2^6 | b*2^5 | b*2^4 | b*2^3 | b*2^2 | b*2^1 | b*2^0 |
Onde b
é o valor binário do bit, o símbolo *
é de multiplicação e o ^
de exponenciação. Então, vamos ver o valor do númro 100110. Se colocarmos ele na tablela teremos:
Posição | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
Valor | b*2^7 | b*2^6 | b*2^5 | b*2^4 | b*2^3 | b*2^2 | b*2^1 | b*2^0 |
Binário | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 |
Valor numérico | 0 | 0 | 32 | 0 | 0 | 4 | 2 | 0 |
Assim, podemos somar os valores de cada bit \(decimal = 32 + 4 + 2 = 38\)
Note que em um byte (8 bits) é possível guardar valores de b00000000 (0 decimal) b11111111 (255 decimal). Ou seja, um total de 256 valores:
Posição | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
Valor | b*2^7 | b*2^6 | b*2^5 | b*2^4 | b*2^3 | b*2^2 | b*2^1 | b*2^0 |
Binário | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Valor numérico | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 0 |
\(decimal = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255\)
Para fazer a conversão inversa, de decimal para binário, podemos utilizar a sobre da divisão por 2. Vamos colocar o valor bnário 1000011 na tabela:
Posição | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
Valor | b*2^7 | b*2^6 | b*2^5 | b*2^4 | b*2^3 | b*2^2 | b*2^1 | b*2^0 |
Binário | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
Valor numérico | 0 | 64 | 0 | 0 | 0 | 0 | 2 | 1 |
\(decimal = 64 + 2 + 1 = 67\)
Então vamos la:
Divide o 67 por 2;
\(67 / 2 = 33 + 1\). Guarda o 1 e divide o 33;
\(33/2 = 16 +1\). Guarda o 1, fica 11 e divide o 16;
\(16/2 = 8 + 0\). Guarda o 0, fica 011 e divide o 8;
\(8/2 = 4 + 0\). Guarda o 0, fica 0011 e divide o 4;
\(16/2 = 8 + 0\). Guarda o 0, fica 00011 e divide o 4;
\(4/2 = 2 + 0\). Guarda o 0, fica 000011 e divide o 2;
\(2/2 = 1\). Guarda o 1, fica 1000011 e termina a divisão;
Veja que temos o número 1000011 em binário que corresponde ao 67 decimal.
Esse sistema pode ser utilizado em qualquer sistema. Vejamos o sistema ternário:
n | possível incrementar à direita? | ||
---|---|---|---|
0 | inicia com 0 a direita | ||
1 | sim | ||
2 | não | ||
1 | 0 | inicia com 0 a direita | |
1 | 1 | sim | |
1 | 2 | sim | |
2 | 0 | sim | |
2 | 1 | sim | |
2 | 2 | não | |
1 | 0 | 0 | sim |
1 | 0 | 1 | sim |
1 | 0 | 2 | sim |
1 | 1 | 0 | sim |
1 | 1 | 1 | sim |
1 | 1 | 2 | sim |
1 | 2 | 0 | sim |
1 | 2 | 1 | sim |
E a tabela ficaria:
Posição | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
Valor | t*3^7 | t*3^6 | t*3^5 | t*3^4 | t*3^3 | t*3^2 | t*3^1 | t*3^0 |
Onde t
é o valor ternário (0, 1 ou 2), o símbolo *
é de multiplicação e o ^
de exponenciação.
Posição | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
Valor | t*3^7 | t*3^6 | t*3^5 | t*3^4 | t*3^3 | t*3^2 | t*3^1 | t*3^0 |
Ternário | 0 | 0 | 0 | 2 | 0 | 0 | 1 | 2 |
Valor numérico | 0 | 0 | 0 | 162 | 0 | 0 | 3 | 2 |
\(decimal = 162 + 3 + 2 = 167\)
Usando a conversão de decimal para ternário podemos dividir por 3 e guardar o resto:
Divide o 167 por 3;
\(67 / 3 = 55 + 2\). Guarda o 2 e divide o 55;
\(55 / 3 = 18 + 1\). Guarda o 12 e divide o 18;
\(18 / 3 = 6 + 0\). Guarda o 012 e divide o 6;
\(6 / 3 = 2 + 0\). Guarda o 0012 e divide o 2;
\(2 / 3 = 0 + 2\). Guarda o 20012 e termina a divisão;