Operadores de Deslocamento de Bits no Arduino
Operadores de Deslocamento de Bits no Arduino
Nesta lição vamos apresentar dois operadores que permitem realizar manipulação de bits em um valor numérico no Arduino, efetuando o deslocamento desses bits (multiplicando ou dividindo seus valores).
Podemos deslocar os bits de um valor numérico utilizando os operadores de deslocamento de bits << e >>.
Operador | Significado |
<< | Deslocamento de bits à esquerda |
>> | Deslocamento de bits à direita |
Imaginemos um valor numérico qualquer, como por exemplo o número 32. Expressando esse valor em binário teremos:
00100000
Se efetuarmos o deslocamento do bit de valor 1, que está na posição 5, uma casa binária para a direita, obteremos o valor:
00010000
O qual em decimal equivale a 16 – metade do valor original. Desta forma, deslocar um bit para a direita equivale a dividir seu valor por 2 a cada casa binária deslocada, enquanto o deslocamento de um bit à esquerda significa que seu valor será multiplicado por dois, a cada casa deslocada.
Desta forma, para um dado bit x:
x << 1 = x * 2
x << 2 = x * 4
x << 3 = x * 8
x >> 1 = x / 2
x >> 2 = x / 4
x >> 3 = x / 8
E assim por diante.
É interessante notar que o microcontrolador do Arduino consegue realizar o deslocamento de bits de forma mais eficiente do que realizar operações de multiplicação e divisão, e por isso é comum utilizá-los em casos em que essas operações são necessárias no código.
Exemplo
// Usando operadores de deslocamento de bits int x = 64; int valorFinal = 0; void setup() { Serial.begin(9600); } void loop() { Serial.print("Valor inicial de x: "); Serial.println(x); Serial.println(x, BIN); valorFinal = x << 1; Serial.print("Valor apos deslocar um bit a esquerda (multiplicar por 2): "); Serial.println(valorFinal); Serial.println(valorFinal, BIN);
Serial.print("Deslocando valor de x 3 casas a direita (div. / 8): "); valorFinal = x >> 3; Serial.println(valorFinal); Serial.println(valorFinal, BIN); delay(3000); }
Neste exemplo, declaramos uma variável x com valor atribuído igual a 64, e criamos também uma variável chamada de valorFinal, com valor inicial igual a zero.
Exibimos o valor de x em binário e em decimal no monitor serial, e então atribuímos seu valor à valorFinal, deslocando seus bits uma casa binária para a esquerda. Isso equivale a multiplicar por dois o valor de cada bit. Exibimos o conteúdo de valorFinal no monitor serial.
Então, realizamos a atribuição de valores de x para valorFinal novamente, porém dessa vez deslocando os bits do número 3 casas binárias para a direita. Isso equivale a dividir o número por 8 (23). Por fim, exibimos o valor da variável, tanto em decimal quanto em binário.
Escreva um comentário