O que são operadores bit a bit?
OPERADORES BITWISE são usados para manipular dados no nível do bit, também chamado de programação no nível do bit. Bitwise opera em um ou mais padrões de bits ou números binários no nível de seus bits individuais. Eles são usados em cálculos numéricos para tornar o processo de cálculo mais rápido.
A seguir está a lista de operadores bit a bit fornecida pela linguagem de programação 'C':
Operador | Significado |
E | Operador bit a bit AND |
| | Operador OR bit a bit |
^ | Operador OR exclusivo bit a bit |
~ | O operador de complemento do binário um é um operador unário |
<< | Operador de deslocamento à esquerda |
>> | Operador de turno à direita |
Os operadores bit a bit não podem ser aplicados diretamente a tipos de dados primitivos, como float, double, etc. Lembre-se sempre de uma coisa que os operadores bit a bit são usados principalmente com o tipo de dados inteiro por causa de sua compatibilidade.
Os operadores lógicos bit a bit trabalham nos dados bit a bit, começando pelo bit menos significativo, ou seja, o bit LSB que é o bit mais à direita, trabalhando em direção ao MSB (Bit Mais Significativo) que é o bit mais à esquerda.
O resultado do cálculo de operadores lógicos bit a bit é mostrado na tabela fornecida a seguir.
x | y | x e y | x | y | x y |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
Neste tutorial, você aprenderá-
- O que são operadores bit a bit?
- E bit a bit
- OR bit a bit
- OR exclusivo bit a bit
- Operadores de deslocamento bit a bit
- Operador de complemento bit a bit
E bit a bit
Este é um dos operadores lógicos bit a bit mais comumente usados. É representado por um único sinal de e comercial (&). Duas expressões inteiras são escritas em cada lado do operador (&).
O resultado da operação AND bit a bit é 1 se ambos os bits tiverem o valor 1; caso contrário, o resultado é sempre 0.
Vamos considerar que temos 2 variáveis op1 e op2 com os seguintes valores:
Op1 = 0000 1101Op2 = 0001 1001
O resultado da operação AND nas variáveis op1 e op2 será
Result = 0000 1001
Como podemos ver, duas variáveis são comparadas bit a bit. Sempre que o valor de um bit em ambas as variáveis for 1, o resultado será 1 ou então 0.
OR bit a bit
É representado por um único sinal de barra vertical (|). Duas expressões inteiras são escritas em cada lado do operador (|).
O resultado da operação OR bit a bit é 1 se pelo menos uma das expressões tiver o valor 1; caso contrário, o resultado é sempre 0.
Vamos considerar que temos 2 variáveis op1 e op2 com os seguintes valores:
Op1 = 0000 1101Op2 = 0001 1001
O resultado da operação OR nas variáveis op1 e op2 será
Result = 0001 1101
Como podemos ver, duas variáveis são comparadas bit a bit. Sempre que o valor de um bit em uma das variáveis for 1, o resultado será 1 ou então 0.
OR exclusivo bit a bit
É representado por um símbolo (^). Duas expressões inteiras são escritas em cada lado do operador (^).
O resultado da operação bit a bit Exclusive-OR é 1 se apenas uma das expressões tiver o valor 1; caso contrário, o resultado é sempre 0.
Vamos considerar que temos 2 variáveis op1 e op2 com os seguintes valores:
Op1 = 0000 1101Op2 = 0001 1001
O resultado da operação OR nas variáveis op1 e op2 será
Result = 0001 0100
Como podemos ver, duas variáveis são comparadas bit a bit. Sempre que apenas uma variável contém o valor 1, o resultado é 0, caso contrário, 0 será o resultado.
Vamos escrever um programa simples que demonstra operadores lógicos bit a bit.
#includeint main(){int a = 20; /* 20 = 010100 */int b = 21; /* 21 = 010101 */int c = 0;c = a & b; /* 20 = 010100 */printf("AND - Value of c is %d\n", c );c = a | b; /* 21 = 010101 */printf("OR - Value of c is %d\n", c );c = a b; /* 1 = 0001 */printf("Exclusive-OR - Value of c is %d\n", c );getch();}
Resultado:
AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1
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 deslocamento fornecidos por 'C', que são representados da seguinte forma:
Operand << n (Left Shift)Operand >> n (Right Shift)
Aqui,
- um operando é uma expressão inteira na qual temos que realizar a operação de deslocamento.
- 'n' é o número total de posições de bits que temos que mudar na expressão de inteiro.
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 removidos e n bits com o valor 0 serão preenchidos no lado direito.
A operação de deslocamento à direita deslocará o número 'n' de bits para o lado direito. Os 'n' bits mais à direita na expressão serão exibidos e o valor 0 será preenchido no lado esquerdo.
Exemplo: x é uma expressão inteira com dados 1111. Depois de realizar a operação de deslocamento, o resultado será:
x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011
Operadores de deslocamento podem ser combinados e usados para extrair os dados da expressão inteira. Vamos escrever um programa para demonstrar o uso de operadores de deslocamento bit a bit.
#includeint main() {int a = 20; /* 20 = 010100 */int c = 0;c = a << 2; /* 80 = 101000 */printf("Left shift - Value of c is %d\n", c );c = a >> 2; /*05 = 000101 */printf("Right shift - Value of c is %d\n", c );return 0;}
Resultado:
Left shift - Value of c is 80Right shift - Value of c is 5
Depois de realizar a operação de deslocamento para a esquerda, o valor se tornará 80, cujo equivalente binário é 101000.
Depois de realizar a operação de deslocamento à direita, o valor se tornará 5 cujo equivalente binário é 000101.
Operador de complemento bit a bit
O complemento bit a bit também é chamado de operador de complemento de alguém, pois sempre leva apenas um valor ou um operando. É um operador unário.
Quando executamos complemento em quaisquer bits, todos os 1s tornam-se 0s e vice-versa.
Se tivermos uma expressão inteira que contenha 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 (~).
Vamos escrever um programa que demonstra a implementação do operador de complemento bit a bit.
#includeint main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}
Resultado:
Complement - Value of c is -11
Aqui está outro programa, com um exemplo de todas as operações discutidas até agora:
#includemain() {unsigned int x = 48; /* 48 = 0011 0000 */unsigned int y = 13; /* 13 = 0000 1101 */int z = 0;z =x & y; /* 0 = 0000 0000 */printf("Bitwise AND Operator - x & y = %d\n", z );z = x | y; /* 61 = 0011 1101 */printf("Bitwise OR Operator - x | y = %d\n", z );z= x^y; /* 61 = 0011 1101 */printf("Bitwise XOR Operator- x^y= %d\n", z);z = ~x; /*-61 = 1100 0011 */printf("Bitwise One's Complement Operator - ~x = %d\n", z);z = x << 2; /* 192 = 1100 0000 */printf("Bitwise Left Shift Operator x << 2= %d\n", z );z= x >> 2; /* 12 = 0000 1100 */printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}
Depois de compilar e executar o programa, ele produz o seguinte resultado:
Bitwise AND Operator - x & y = 0Bitwise OR Operator - x | y = 61Bitwise XOR Operator- x^y= 61Bitwise One's Complement Operator - ~x = -49Bitwise Left Shift Operator x << 2= 192Bitwise 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 de nível de bits.
- 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.