Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Operadores bit a bit em C:AND, OR, XOR, Shift &Complement

O que são operadores bit a bit?


Operadores bit a bit são usados ​​para manipular dados em nível de bit, também chamado de programação em nível de bit. Bitwise opera em um ou mais padrões de bits ou numerais 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 fornecidos pela linguagem de programação 'C':
Operador Significado & Operador AND bit a bit| 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 deslocamento à 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 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 (Most Significant Bit) que é o bit mais à esquerda.

O resultado do cálculo de operadores lógicos bit a bit é mostrado na tabela abaixo.
x s x &y x | x ^ y 0 00000 10111 00111 1110
Neste tutorial, você aprenderá-

Bit a bit E


Este é um dos operadores lógicos bit a bit mais 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 valores da seguinte forma:
Op1 = 0000 1101
Op2 = 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 pouco a pouco. Sempre que o valor de um bit em ambas as variáveis ​​for 1, então o resultado será 1 ou então 0.

Bit a bit OU


É 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 valores da seguinte forma:
Op1 = 0000 1101
Op2 = 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 pouco a pouco. Sempre que o valor de um bit em uma das variáveis ​​for 1, o resultado será 1 ou então 0.

Exclusivo bit a bit OU


É representado por um símbolo (^). Duas expressões inteiras são escritas em cada lado do operador (^).

O resultado da operação OR Exclusivo bit a bit será 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 valores da seguinte forma:
Op1 = 0000 1101
Op2 = 0001 1001

O resultado da operação XOR nas variáveis ​​op1 e op2 será
Result = 0001 0100

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, senão 0 será o resultado.

Vamos escrever um programa simples que demonstre operadores lógicos bit a bit.
#include <stdio.h>
int 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 20
OR - Value of c is 21
Exclusive-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,

A operação de deslocamento à 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 na 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 de deslocamento o resultado será:
x << 2 (left shift) = 1111<<2 = 1100
x>>2 (right shift) = 1111>>2 = 0011

Os operadores de deslocamento podem ser combinados e, em seguida, podem ser usados ​​para extrair os dados da expressão inteira. Vamos escrever um programa para demonstrar o uso de operadores de deslocamento bit a bit.
#include <stdio.h>
int 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 80
Right shift - Value of c is 5

Após realizar a operação de deslocamento à esquerda o valor se tornará 80 cujo equivalente binário é 101000.

Após realizar a operação de deslocamento para a 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, pois sempre recebe apenas um valor ou um operando. É um operador unário.

Quando realizamos complemento em qualquer bit, todos os 1’s se tornam 0’s e vice-versa.

Se tivermos uma expressão inteira que contém 0000 1111, depois de executar a operação de complemento bit a bit, o valor se tornará 1111 0000.

O operador complemento bit a bit é indicado pelo símbolo til (~).

Vamos escrever um programa que demonstre a implementação do operador complemento bit a bit.
#include <stdio.h>
int 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:
#include <stdio.h>
main() {
   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;          /*-49 = 11001111 */
   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 = 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


Linguagem C

  1. Classe e objeto C#
  2. Classe abstrata e método C#
  3. C# Classe Parcial e Método Parcial
  4. Classe e método selados em C#
  5. Operadores C++
  6. C Palavras-chave e Identificadores
  7. Operadores de programação C
  8. IoT e blockchain - Uma mudança de paradigma
  9. Operadores em C++ com Exemplo:O que é, Tipos e Programas
  10. Operadores Python:Aritmética, Lógica, Comparação, Atribuição, Bitwise e Precedência