C Operadores bit a bit: AND, OR, XOR, Complemento e Operações de deslocamento

Neste tutorial, você aprenderá sobre todos os 6 operadores bit a bit na programação C com exemplos.

Na unidade aritmético-lógica (que está dentro da CPU), operações matemáticas como: adição, subtração, multiplicação e divisão são feitas em nível de bits. Para realizar operações de nível de bit na programação C, os operadores bit a bit são usados.

Operadores Significado dos operadores
E E bit a bit
| OR bit a bit
^ XOR bit a bit
~ Complemento bit a bit
<< Shift left
>> Shift direita

Operador AND bit a bit &

A saída de bit a bit AND será 1 se os bits correspondentes de dois operandos forem 1. Se um dos bits de um operando for 0, o resultado do bit correspondente será avaliado como 0.

Vamos supor a operação AND bit a bit de dois inteiros 12 e 25.

 12 = 00001100 (em binário) 25 = 00011001 (em binário) Operação de bits de 12 e 25 00001100 & 00011001 ________ 00001000 = 8 (em decimal)

Exemplo # 1: bit a bit AND

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; ) 

Resultado

 Saída = 8

Operador OR bit a bit |

A saída de OR bit a bit é 1 se pelo menos um bit correspondente de dois operandos for 1. Na Programação C, o operador OR bit a bit é denotado por |.

12 = 00001100 (em binário) 25 = 00011001 (em binário) Bitwise OU Operação de 12 e 25 00001100 | 00011001 ________ 00011101 = 29 (em decimal)

Exemplo # 2: bit a bit OR

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; ) 

Resultado

 Produto = 29

Operador XOR bit a bit (OU exclusivo) ^

O resultado do operador XOR bit a bit é 1 se os bits correspondentes de dois operandos forem opostos. É denotado por ^.

 12 = 00001100 (em binário) 25 = 00011001 (em binário) Operação de XOR bit a bit de 12 e 25 00001100 00011001 ________ 00010101 = 21 (em decimal)

Exemplo # 3: XOR bit a bit

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )

Resultado

 Produto = 21

Operador de complemento bit a bit ~

O operador de elogio bit a bit é um operador unário (funciona em apenas um operando). Ele muda de 1 para 0 e de 0 para 1. É denotado por ~.

 35 = 00100011 (em binário) Complemento bit a bit Operação de 35 ~ 00100011 ________ 11011100 = 220 (em decimal) 

Torcer no operador de complemento bit a bit na programação C

O complemento bit a bit de 35 (~ 35) é -36 em vez de 220, mas por quê?

Para qualquer inteiro n, o complemento bit a bit de n será -(n+1). Para entender isso, você deve ter conhecimento do complemento de 2.

Complemento de 2

O complemento de dois é uma operação em números binários. O complemento de 2 de um número é igual ao complemento desse número mais 1. Por exemplo:

 Complemento do binário decimal 2 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimal) 12 00001100 - (11110011 + 1) = -11110100 = -244 (decimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimal) Nota: O estouro é ignorado durante o cálculo do complemento de 2. 

O complemento bit a bit de 35 é 220 (em decimal). O complemento de 2 de 220 é -36. Portanto, a saída é -36 em vez de 220.

O complemento bit a bit de qualquer número N é - (N + 1). Veja como:

 complemento bit a bit de N = ~ N (representado na forma de complemento de 2) complemento 2'de ~ N = - (~ (~ N) +1) = - (N + 1) 

Exemplo # 4: complemento bit a bit

 #include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; ) 

Resultado

 Saída = -36 Saída = 11

Operadores de turno na programação C

There are two shift operators in C programming:

  • Right shift operator
  • Left shift operator.

Right Shift Operator

Right shift operator shifts all bits towards right by certain number of specified bits. It is denoted by>>.

 212 = 11010100 (In binary) 212>>2 = 00110101 (In binary) (Right shift by two bits) 212>>7 = 00000001 (In binary) 212>>8 = 00000000 212>>0 = 11010100 (No Shift) 

Left Shift Operator

Left shift operator shifts all bits towards left by a certain number of specified bits. The bit positions that have been vacated by the left shift operator are filled with 0. The symbol of the left shift operator is <<.

 212 = 11010100 (In binary) 212<<1 = 110101000 (In binary) (Left shift by one bit) 212<<0 = 11010100 (Shift by 0) 212<<4 = 110101000000 (In binary) =3392(In decimal)

Example #5: Shift Operators

 #include int main() ( int num=212, i; for (i=0; i>i); printf(""); for (i=0; i<=2; ++i) printf("Left shift by %d: %d", i, num< 
 Right Shift by 0: 212 Right Shift by 1: 106 Right Shift by 2: 53 Left Shift by 0: 212 Left Shift by 1: 424 Left Shift by 2: 848 

Artigos interessantes...