[LINGUAGEM C] Utilizando rotacionamento de bits para realizar cálculos

Nesse post irei demonstrar como podemos realizar cálculos matemáticos simples, somente utilizando rotacionamento de bits.

Lembrando que isso somente pode ser utilizado com variáveis inteiras.

Quando utilizamos o operador << [ Rotação de bits a esquerda] multiplicamos seu conteúdo por 2.

Se pegarmos o valor 2 em decimal [0b00000010 em binário] e rotacionarmos para a esquerda uma vez teremos o valor 4 [0b00000100 em binário].

Portanto:

0b00000010 << 1 = 0b00000100

Em linguagem C podemos escrever assim:

void main()
{
   unsigned char ucContador=2; // Definido um valor inicial para a variável
   ucContador = ucContador << 1; // ucContador rotacionado uma vez para a esquerda
   while(1);
}

Nesse exemplo simples demonstro como podemos codificar essa forma de calcular.

Outra forma de codificar é essa:

void main()
{
   unsigned char ucContador=2; // Definido um valor inicial para a variável
   ucContador << = 1; // ucContador rotacionado uma vez para a esquerda
   while(1);
}

Essa segunda forma utiliza o operador de atribuição composta <<=, que realiza a mesma coisa que o anterior, com menos codificação.

Falarei sobre esses operadores em outro post.

Dessa forma simplifica a maneira de realizar o calculo de múltiplos de 2.

Se quisermos multiplicar esse valor por 4, devemos rotacionar duas vezes, por 8 rotacionar três vezes, por 16 quatro vezes e assim por diante.

Lembrando que o resultado é sempre um valor inteiro.

Já na rotação para a direita, estaremos dividindo o conteúdo da variável por 2.

Utilizando o exemplo anterior.

void main()
{
   unsigned char ucContador=2; // Definido um valor inicial para a variável
   ucContador &gt;&gt;= 1; // ucContador rotacionado uma vez para a direita
   while(1);
}

Teremos o resultado de 0b00000001 , portanto 1 em decimal.

Isso, como eu disse anteriormente, pode ser utilizado para dividirmos valores por múltiplos de 2.

Lembrando que o resultado é sempre um valor inteiro.

E se dividíssemos novamente por 2, o que aconteceria?

O resultado seria 0, pois 1 dividido por 2 é 0,5 e como eu já havia dito o resultado somente são números inteiros.

Mas no caso da rotação a direita existe um caso especial, que é quando realizamos a rotação em números sinalizados negativos.

Nesse caso ao rotacionarmos serão inseridos 1 nos valores rotacionados.

Ex. -10 em decimal é 0b11110110 resulta em 0b11111011 [-5]

O bit em vermelho foi inserido no ligar do rotacionado, nos outros casos são inseridos 0 nos lugares vagos.

Espero ter ajudado com esse post.

Comentem e ajude-nos a criar conteúdos que auxiliarão a todos.


Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[LINGUAGEM C] Utilizando rotacionamento de bits para realizar cálculos
Tags:         

Deixe uma resposta

%d blogueiros gostam disto: