C Operatori bit per bit: AND, OR, XOR, Complement e Shift Operations

In questo tutorial imparerai a conoscere tutti e 6 gli operatori bit per bit nella programmazione C con esempi.

Nell'unità logica-aritmetica (che si trova all'interno della CPU), operazioni matematiche come: addizione, sottrazione, moltiplicazione e divisione vengono eseguite a livello di bit. Per eseguire operazioni a livello di bit nella programmazione C, vengono utilizzati operatori bit per bit.

Operatori Significato degli operatori
& Bitwise AND
| OR bit per bit
^ Bitwise XOR
~ Bitwise complement
<< Sposta a sinistra
>> Sposta a destra

Operatore AND bit per bit e

L'output di AND bit per bit è 1 se i bit corrispondenti di due operandi sono 1. Se uno dei bit di un operando è 0, il risultato del bit corrispondente viene valutato a 0.

Supponiamo che l'operazione AND bit per bit di due interi 12 e 25.

 12 = 00001100 (in binario) 25 = 00011001 (in binario) Operazione a bit di 12 e 25 00001100 e 00011001 ________ 00001000 = 8 (in decimale)

Esempio # 1: AND bit per bit

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

Produzione

 Uscita = 8

Operatore OR bit per bit |

L'output di OR bit per bit è 1 se almeno un bit corrispondente di due operandi è 1. Nella programmazione C, l'operatore OR bit per bit è indicato con |.

12 = 00001100 (in binario) 25 = 00011001 (in binario) Operazione OR bit per bit di 12 e 25 00001100 | 00011001 ________ 00011101 = 29 (in decimale)

Esempio # 2: OR bit per bit

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

Produzione

 Uscita = 29

Operatore XOR (OR esclusivo) bit per bit ^

Il risultato dell'operatore XOR bit per bit è 1 se i bit corrispondenti di due operandi sono opposti. È indicato con ^.

 12 = 00001100 (in binario) 25 = 00011001 (in binario) Operazione XOR bit per bit di 12 e 25 00001100 00011001 ________ 00010101 = 21 (in decimale)

Esempio n. 3: XOR bit per bit

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

Produzione

 Uscita = 21

Operatore di complemento bit per bit ~

L'operatore di complimento bit per bit è un operatore unario (funziona su un solo operando). Cambia da 1 a 0 e da 0 a 1. È indicato da ~.

 35 = 00100011 (in binario) Operazione a complemento bit per bit 35 ~ 00100011 ________ 11011100 = 220 (in decimale) 

Twist in bitwise complet operator in C Programming

Il complemento bit per bit di 35 (~ 35) è -36 invece di 220, ma perché?

Per ogni intero n, il complemento bit per bit di n sarà -(n+1). Per capire questo, dovresti avere la conoscenza del complemento di 2.

Complemento di 2

Il complemento di due è un'operazione sui numeri binari. Il complemento a 2 di un numero è uguale al complemento di quel numero più 1. Ad esempio:

 Decimale Complemento a 2 binario 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimale) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimale) 12 00001100 - (11110011 + 1) = -11110100 = -244 (decimale) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimale) Nota: l'overflow viene ignorato durante il calcolo del complemento a 2. 

Il complemento bit a bit di 35 è 220 (in decimale). Il complemento di 2 di 220 è -36. Quindi, l'output è -36 invece di 220.

Il complemento bit per bit di qualsiasi numero N è - (N + 1). Ecco come:

 complemento bit per bit di N = ~ N (rappresentato in forma di complemento a 2) 2 'complemento di ~ N = - (~ (~ N) +1) = - (N + 1) 

Esempio # 4: complemento bit per bit

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

Produzione

 Uscita = -36 Uscita = 11

Operatori di turno nella programmazione 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 

Articoli interessanti...