Na aula anterior vimos que para de fato conseguir um arquivo compactado com o algoritmo de huffman precisamos trabalhar com manipulação de bits. Então, vamos fazer isso a partir desta aula.
Nesta aula vamos iniciar mais um módulo em nosso Curso de Programação C. Como realizar operações bit a bit com a linguagem C. Nesta aula vamos aprender como fazer um deslocamento bit a bit à esquerda ou à direita com a linguagem C.
Na linguagem de programação C um deslocamento bit a bit pode ser feito de forma muito simples com os sinais matemáticos de maior ou menor.
<< Deslocamento à esquerda
>> Deslocamento à direita
Deslocamento bit a bit à esquerda em C
Para entender como esta operação funciona vamos a um exemplo.
Seja uma variável “a” com o valor 1 ( a = 1; ). O valor 1 em binário com 8 bits é: 00000001
Um deslocamento à esquerda pode ser feito da forma como mostrado a seguir:
b = a << 1;
Este deslocamento joga fora o bit mais significativo (bit mais à esquerda) e acrescenta um zero à direita. Assim, a variável b terá o seguinte conjunto de bits: 00000010, que em decimal é o número 2.
Também podemos fazer um deslocamento de duas unidades em a, assim:
b = a << 2;
Este deslocamento irá jogar fora os dois bits mais significativos (mais à esquerda) e acrescentar dois bits zeros à direita. Assim, o resultado na variável b será: 00000100, que em decimal é o número 4.
Perceba que o deslocamento à esquerda é equivalente à multiplicação por 2.
Deslocamento bit a bit à direita em C
Esta operação é similar à operação de deslocamento à esquerda, apenas invertendo a direção do deslocamento. Vamos a um exemplo.
Seja “a” uma variável inicializada com o valor 10 ( a = 10; ). O valor 10 em binário com 8 bits é: 00001010
Um deslocamento à direita pode ser feito da forma como mostrado a seguir:
b = a >> 1;
Este deslocamento joga fora o bit menos significativo (bit mais à direita) e acrescenta um zero à esquerda. Assim, a variável b terá o seguinte conjunto de bits: 00000101, que em decimal é o número 5.
Também podemos fazer um deslocamento de duas unidades em a, assim:
b = a >> 2;
Este deslocamento irá jogar fora os dois bits menos significativos (mais à direita) e acrescentar dois bits zeros à esquerda. Assim, o resultado na variável b será: 00000010, que em decimal é o número 2.
Perceba que o deslocamento à direita é equivalente à divisão inteira por 2.
Código de exemplo em C para deslocamentos de bits à esquerda e à direita
/* Deslocamento bit a bit na linguagem C Código escrito por Wagner Gaspar Outubro de 2021 */ int main(){ // Deslocamento à esquerda int a, b; a = 1; // 0001 b = a << 1; // 0010 = 2 printf("a: %d\tb: %d\n", a, b); b = a << 2; // 0100 = 4 printf("a: %d\tb: %d\n", a, b); b = a << 3; // 1000 = 8 printf("a: %d\tb: %d\n", a, b); // Deslocamento à Direita a = 10; // 1010 b = a >> 1; // 0101 = 5 printf("a: %d\tb: %d\n", a, b); b = a >> 2; // 0010 = 2 printf("a: %d\tb: %d\n", a, b); b = a >> 3; // 0001 = 1 printf("a: %d\tb: %d\n", a, b); return 0; }