Operadores em linguagem C
8. Operadores de deslocamento bit a bit
Os operadores de deslocamento bit a bit são usados para mover/deslocar os padrões de bits para o lado esquerdo ou direito. Esquerda e direita são dois operadores de turno fornecidos por 'C' que são representados da seguinte forma:
Operand >> n (Right Shift)
Aqui,
- um operando é uma expressão inteira na qual devemos realizar a operação de deslocamento.
- 'n' é o número total de posições de bits que precisamos mudar na expressão inteira.
A operação de deslocamento para a esquerda deslocará o número 'n' de bits para o lado esquerdo. Os bits mais à esquerda na expressão serão exibidos e n bits com o valor 0 serão preenchidos no lado direito.
A operação de deslocamento para a direita deslocará o número 'n' de bits para o lado direito. Os 'n' bits mais à direita da expressão serão exibidos e o valor 0 será preenchido no lado esquerdo.
Exemplo: x é uma expressão inteira com dados 1111. Após realizar a operação shift o resultado será:
x >>2 (right shift) = 1111 >>2 = 0011
Os operadores podem ser combinados e então podem ser usados para extrair os dados da expressão inteira.
Como podemos ver, duas variáveis são comparadas pouco a pouco. Sempre que apenas uma variável mantém o valor 1, o resultado é 0, caso contrário, 0 será o resultado.
Listagem 02 - Operadores de Deslocamento bit a bit.
- 1 #include <stdio.h>
- 2 int main() {
- 3 int a = 20; /* 20 = 010100 */
- 4 int c = 0;
- 5
- 7 c = a <<2; /* 80 = 101000 */
- 8 printf("Left shift - Valor de c é %d\n", c );
- 9
- 10 c = >> 2; /*5 = 000101 */
- 11 printf("Right shift - Valor de c é %d\n", c );
- 12 return 0;
- 13 }
- Saída:
- Left shift - Valor de c é 80
- Right shift - Valor de c é 5
Após realizar a operação de deslocamento para a esquerda o valor se tornará 80 cujo equivalente binário é 101000.
Após realizar a operação de deslocamento para a direita, o valor passará a ser 5 cujo equivalente binário é 000101.
8.1 - Operador de complemento bit a bit
O complemento bit a bit também é chamado de operador de complemento, pois sempre leva apenas um valor ou um operando. É um operador unário.
Quando realizamos complemento em qualquer bit, todos os 1 se tornam 0 e vice-versa.
Se tivermos uma expressão inteira que contém 0000 1111, depois de realizar a operação de complemento bit a bit, o valor se tornará 1111 0000.
O operador de complemento bit a bit é denotado pelo símbolo til (~).
Listagem 03 - Operador de Complemento bit a bit.
- 1 #include <stdio.h>
- 2 int main() {
- 3 int a = 10; /* 10 = 1010 */
- 4 int c = 0;
- 5 c = ~(a);
- 6 printf("Complement - Valor de c é %d\n", c );
- 7 return 0;
- 8 }
- Saída:
- Complement - Valor de c é -11
Listagem 04 - Aqui um exemplo prático das operações discutidas até agora:
- 1 #include <stdio.h>
- 2 int main() {
- 3 unsigned int x = 48; /* 48 = 0011 0000 */
- 4 unsigned int y = 13; /* 13 = 0000 1101 */
- 5 int z = 0;
- 6
- 7 z =x & y; /* 0 = 0000 0000 */
- 8 printf("Bitwise AND Operator - x & y = %d\n", z );
- 9
- 10 z = x | y; /* 61 = 0011 1101 */
- 11 printf("Bitwise OR Operator - x | y = %d\n", z );
- 12
- 13 z= x^y; /* 61 = 0011 1101 */
- 14 printf("Bitwise XOR Operator- x^y= %d\n", z);
- 15
- 16 z = ~x; /*-49 = 11001111 */
- 17 printf("Bitwise One's Complement Operator - ~x = %d\n", z);
- 18
- 19 z = x << 2; /* 192 = 1100 0000 */
- 20 printf("Bitwise Left Shift Operator x << 2= %d\n", z );
- 21
- 22 z= x >> 2; /* 12 = 0000 1100 */
- 23 printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );
- 24 }
Depois de compilado e executado o programa, teremos o seguinte resultado:
- Saída:
- Bitwise AND Operator - x & y = 0
- Bitwise OR Operator - x | y = 61
- Bitwise XOR Operator- x^y= 61
- Bitwise One's Complement Operator - ~x = -49
- Bitwise Left Shift Operator x << 2= 192
- Bitwise Right Shift Operator x >> 2= 12
Resumo
- Operadores bit a bit são conjuntos de operadores especiais fornecidos por 'C.'
- Eles são usados na programação em nível de bit.
- Esses operadores são usados para manipular bits de uma expressão inteira.
- Lógico, deslocamento e complemento são três tipos de operadores bit a bit.
- O operador de complemento bit a bit é usado para reverter os bits de uma expressão.