Se lembramos que um sistema de numeração se conforma de um conjunto de regras e princípios que permite expressar ou definir um número válido dentro do mesmo, podemos afirmar que a maioria deles (Sistemas: binários, octanos, decimais, hexadecimais, etc..) se pueden representar mediante un polinomio sencillo que nos permitirá entender su lógica:
Número = N*basen + N*basen-1+ N*basen-2 até que a base fique elevada à 0 sempre e quando não contiver decimais o "Número"
Onde Número é o valor expressado dentro do sistema, base como seu nome o indica a base do sistema (se é binário : 2 , octano: 8, decimal: 10, hexadecimal : 16, etc…) e n a posição que ocupa o digito "N" dentro do Número.
Exemplos em sistema decimal (base:10):
18598 1*10 4 + 8*10 3 + 5*10 2 + 9*10 1 + 8*10 0
Descompomos o valor expressado "18598" multiplicando-o pela base do sistema (10) elevada à posição do dígito na expressão.
O número 1 encontra-se iniciando a expressão e salva em seu interior 10 000 (Para comprova-lo: se eliminarmos o 1 o resultado será (18598-10 000)) portanto 10 000 é igual a 10 4 (1*104)=10 000 + (8*103)= 8 000…
No sistema de numeração binário a mesma fórmula é aplicável:
10 (número binario) = 1*2 1 + 0*2 0
O que indica que 10, no sistema decimal é igual 2, na verdade, no sistema de numeração binário pode-se definir qualquer número inteiro maior ou igual a 0, entretanto a estrutura de armazenamento Byte só foi desenhada desde sua origem para armazenar até 256 porque inclui como máximo 8 bits (28 = 256) (lembremos que leva-se em conta o 0 pelo qual 255 equivalerá a 256) e foi escolhido este valor como máximo porque é a totalidade de caracteres disponível na tabla ASCII, que inclui todos os caracteres válidos dentro de um computador, para comprovar isto podemos salvar um caractere em um arquivo sem formato e como resultado teremos que sempre ocupará 1 byte, se colocamos 2 caracteres o tamanho do arquivo será igual a 2 bytes. O que justifica que 1 byte = 8 bits = pode armazenar até 256. e 1 bit é a mínima unidade na que se pode armazenar informação. Exemplo: o tipo booleano (bool) ocupa na memória 1 bit, portanto TRUE = 1 FALSE=0.
Por esta razão a maioria dos hardwares com capacidade de armazenamento tais como Discos rígidos, memórias, e outros dispositivos; sua capacidade sempre será divisível entre 2 , assim como as demais estruturas de armazenamento ( Kb, Mb, Gb, Tb, etc)
Como referia anteriormente, a tabela ASCII inclui todos os caracteres válidos dentro do computador, desde todas as letras em minúsculas e maiúsculas, números e outros especiais, estes últimos utilizados em sua maioria como delimitadores ou separadores guia dentro de um formato de arquivo de conteúdo binário (PDF, DOC, EXE, DLL, OCX, ENTRE OUTROS) Exemplo de delimitadores: O endereço IP inclui 4 pares de cujo valor máximo é 255 para poder representa-lo em decimal se faz mais que necessário, obrigatório o uso de delimitadores pelo qual se emprega um ". (Ponto)" de modo tal que 255.255.255.255, para reduzir esta informação a 4 bytes poderemos acudir à tabela ASCII.
Por exemplo o caractere "A" dentro da tabela ASCII no sistema decimal ocupa 64, podemos executar uma função amplamente reconhecida por linguagens de programação entre eles (Delphi, C++, VB, Php, etc) chamada ORD que produzirá como resultado de ord(64) "A" se pelo contrário executarmos chr('A') o resultado será 64 em decimal, o qual representado em binário equivaleria a "1000000", embora 64 não ocupe fisicamente os 255 (1 byte completo) seu tamanho em disco sempre será 1 byte, porque a maioria de sistemas operacionais e hardware desde sua ensambladura está orientados para reservar um mínimo de espaço em memória e em disco levando em conta que esse valor pode ser modificado a 255 (máximo) ou 0 (mínimo) em qualquer momento.
Portanto podemos dizer que um bit tem um valor de acordo com sua posição ou localização e para encontrar esse valor só temos que descompor 255.
128 | 62 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8(bits) |
Como comentávamos anteriormente o bit se conforma de 0 e 1 respectivamente portanto afirmaremos a partir de agora que 0 É IGUAL A FALSO (false) E 1 É IGUAL A VERDADEIRO (true) se tivermos um conjunto de 8 bits o somaremos segundo sua posição, sempre e quando o bit for VERDADEIRO, ou seja, seu conteúdo for igual a 1, exemplo: dado os bits "10111011" para converte-lo a decimal aplicamos a tabela:
128 | 62 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 |
E posteriormente, somamos somente os valores que são "VERDADEIROS" então: 128+32+16+8+2+1=187 Parabéns! 10111011=187!, então, podemos dizer que para armazenar 256 necessitaremos que os 8 bits sejam verdadeiros, ou seja, 8 bits e já teremos nosso byte.
Para fazer o processo contrário, ou seja, de decimais a binário, só temos que descompor o decimal dividindo-o sempre entre 2 até que o valor seja igual a 1, o agrupamento dos resíduos obtidos será nosso valor binário; obviamente os resíduos sempre serão (0 ou 1).
Os bits são amplamente utilizados para codificar dados, comprimir informação, etc. Por exemplo, o formato de imagens desenhado por Microsoft (.BMP) calcula a área da imagem, ou seja, base por altura ou o que é igual à largura pela altura, o qual assume como a quantidade de pontos disponíveis, estes pontos por sua vez armazenam uma cor hexadecimal de 3 pares conhecida como RGB que armazena as cores VERMELHO, VERDE E AZUL, pelo qual para o armazenamento da cor emprega 3 bytes (255,255,255) e os recebe com ASCII, por cada ponto , o que indica se uma imagem é de 10 px x 10 px empregará 300 bytes para armazenar os pontos e outros adicionais que salvam informação de propriedades e características de essencial importância. Utilizando bytes delimitadores ou separadores no caso de não conhecer o final do valor, ou seja, se a quantidade de bytes a empregar pelo cabeçalho do formato (que contém informação) se desconhece ou pode variar dependendo de fatores, se faz indispensável o uso de delimitadores (ASCII DEFINIDOS COMO DELIMITADORES), se pelo contrário sempre se situará entre os bytes 10 e 20, por exemplo (não será necessário). Por tal motivo quando lemos um arquivo (com um programa desenvolvido por nós) devemos especificar quantos bytes leremos por cada seqüência, no caso das cores dos formato (BMP) bastará ler de 3 em 3, cabe destacar que um arquivo pode ser lido até 1024 ou seja 1 KB de seqüência que equivale a uma linha de informação, a partir dessa base foram desenhados mecanismos de compreensão que agrupa os bits repetido em matrizes ou arrays.
Para tornar possível este manejo existem alguns operadores similares aos de lógica ( OR, AND, NOT, XOR, ETC…) melhor conhecidos como operadores bit a bit.
Deslocando bits:
Podemos defini-lo como a ação de transportar bytes de um extremo da expressão a outro, como a expressão está conformada por 2 só se pode fazer em dois sentidos, esquerda e direita.
- Deslocando bits à esquerda (<<)
Consiste em mover a quantidade de bit indicada na expressão, da esquerda à direita, esta operação equivale a multiplicar por 2.
Por exemplo:
16 <<2 deslocaremos 2 bits da esquerda à direita
16 em binário equivale a 00010000 pelo qual moveremos os dois primeiros bits à parte de atrás do número (direita) de tal modo que ficará 01000000 o qual equivale a 64.
Portanto se multiplicamos(16*2)=32 (32*2)=64 1 bit 2 bits - Deslocando bits à direita (>>)
Consiste em mover a quantidade de bit indicada na expressão, da direita à esquerda, esta operação equivale a dividir por 2.
Por exemplo:
128 >>4 deslocaremos 4 bits da direita à esquerda.
128 em binário é igual a: 10000000, moveremos os últimos 4 bits à parte inicial ( da direita a esquerda), o resultado será 00001000 cujo valor é igual a 8
portanto se dividimos(128 / 2)=64 (64/2)=32 (32/2)=16 (16/2)=8 1 bit 2 bits 3 bits 4 bits
Emprega-se 2 por ser a base do sistema de numeração binário.
Operador de lógica OR |
Lembraremos que chamaremos 0 em binário False e 1 True, então o operador OR
Avaliará as expressões e produzirá TRUE ou seja, 1 só se um dos 2 bits a comparar for igual a 1. Exemplo:
Expressão: 5 | 12
5 em binário é igual a 00000101
12 em binário = 00001100
Resultado : 00001101 = 13
Só se um par dos bits a comparar for 1 o resultado será 1, se comporta exatamente igual a uma condição: (true || false) é igual a true; (false || false) é igual a false, sua razão se deve a que a condição de dois ou mais argumentos se transforma sempre em binários para realizar a comparação utilizando o processador e a memória de computador.
Operador de lógica AND &
Só se o par de bits a comparar for igual a 1 o resultado será 1.
Expressão: 5 & 12
5 em binário é igual a 00000101
12 em binário = 00001100
Resultado : 00000100 = 4
É parecido a (TRUE && TRUE) é igual a true, (False && True) é igual a false.
Operador XOR ^
Só se o par de bits a comparar for diferente será igual a 1.
Expresión: 5 ^ 12
5 em binário é igual a 00000101
12 em binário = 00001100
Resultado : 00001001 = 9
Similar a (TRUE XOR FALSE) es igual a true, ( TRUE XOR TRUE) es igual a false.
Operador Not ~
Só se o bit a comparar for igual a 0 (False) será igual a 1.
Expressão: ~5
5 em binário é igual a 00000101
Resultado : 00000010 = 2
Similar a (!FALSE) é igual a true
Importância do manejo dos bits
Como programador darrei uma opinião muito pessoal, torna-se indispensável na construção de aplicações em grande escala o desenvolvimento de formatos pessoais baseados em esquemas que armazenam a informação empregada de modo comprimido para a utilização de um ou outros recursos de nossa aplicação, permitindo ao usuário final maior comodidade y segurança durante o transporte da informação e oferecendo-lhe a capacidade de torna-las compatíveis com outras aplicações, e deixar a um lado (dependendo do objetivo) o típico uso de banco de dados que requerem recursos adicionais do computador ademais de interpretadores, etc. Considero que a informação redigida contribui consideravelmente a encaminhar seus esforços nessa direção.
Conclusão:
Podemos dizer que o computador sem software só tem capacidades para fazer operações aritméticas simples (somas, subtrações, multiplicação, etc…)
E é o software que valendo essas simples operações com processos como os explicados anteriormente, pode criar a interface como da que hoje desfrutamos em matéria de Sistemas Operacionais, todas as linguagens desde as mais altas como Php até as mais baixas como Assembler passam por binário, cada vez que movemos o Mouse isso está produzindo um processamento de dados binários, enfim, oriente seus esforços como programador a reduzir ao máximo o consumo de recursos, certamente você conseguirá uma soma consumindo menor quantidade de recursos que o habitual.
Seu comentário será moderado e poderá não ser aprovado.