Sistema de contagem binário

Daniel Tiezzi

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;