Operatori C bit per bit: AND, OR, XOR, Shift & Complemento (con esempio)

Sommario:

Anonim

Cosa sono gli operatori bit per bit?

Gli OPERATORI BITWISE sono usati per manipolare i dati a livello di bit, chiamata anche programmazione a livello di bit. Bitwise opera su uno o più schemi di bit o numeri binari a livello dei singoli bit. Sono utilizzati nei calcoli numerici per rendere più veloce il processo di calcolo.

Di seguito è riportato l'elenco degli operatori bit per bit forniti dal linguaggio di programmazione 'C':

Operatore Significato
& Operatore AND bit per bit
| Operatore OR bit per bit
^ Operatore OR esclusivo bit per bit
~ L'operatore di complemento di Binary One è un operatore unario
<< Operatore di spostamento a sinistra
>> Operatore di turno a destra

Gli operatori bit per bit non possono essere applicati direttamente a tipi di dati primitivi come float, double, ecc. Ricorda sempre una cosa che gli operatori bit per bit vengono utilizzati principalmente con il tipo di dati intero a causa della sua compatibilità.

Gli operatori logici bit per bit lavorano sui dati bit per bit, partendo dal bit meno significativo, cioè il bit LSB che è il bit più a destra, lavorando verso l'MSB (Most Significant Bit) che è il bit più a sinistra.

Il risultato del calcolo degli operatori logici bit per bit è mostrato nella tabella riportata di seguito.

X y x & 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

In questo tutorial imparerai-

  • Cosa sono gli operatori bit per bit?
  • Bitwise AND
  • OR bit per bit
  • OR esclusivo bit per bit
  • Operatori di spostamento bit per bit
  • Operatore di complemento bit per bit

Bitwise AND

Questo è uno degli operatori logici bit per bit più comunemente usati. È rappresentato da un unico segno e commerciale (&). Due espressioni intere vengono scritte su ciascun lato dell'operatore (&).

Il risultato dell'operazione AND bit per bit è 1 se entrambi i bit hanno valore 1; in caso contrario, il risultato è sempre 0.

Consideriamo di avere 2 variabili op1 e op2 con valori come segue:

Op1 = 0000 1101Op2 = 0001 1001

Il risultato dell'operazione AND sulle variabili op1 e op2 sarà

Result = 0000 1001

Come possiamo vedere, due variabili vengono confrontate bit per bit. Ogni volta che il valore di un bit in entrambe le variabili è 1, il risultato sarà 1 oppure 0.

OR bit per bit

È rappresentato da un unico segno di barra verticale (|). Due espressioni intere vengono scritte su ciascun lato dell'operatore (|).

Il risultato dell'operazione OR bit per bit è 1 se almeno una delle espressioni ha il valore 1; in caso contrario, il risultato è sempre 0.

Consideriamo di avere 2 variabili op1 e op2 con valori come segue:

Op1 = 0000 1101Op2 = 0001 1001

Il risultato dell'operazione OR sulle variabili op1 e op2 sarà

Result = 0001 1101

Come possiamo vedere, due variabili vengono confrontate bit per bit. Ogni volta che il valore di un bit in una delle variabili è 1, il risultato sarà 1 oppure 0.

OR esclusivo bit per bit

È rappresentato da un simbolo (^). Due espressioni intere vengono scritte su ciascun lato dell'operatore (^).

Il risultato dell'operazione OR esclusivo bit per bit è 1 se solo una delle espressioni ha il valore 1; in caso contrario, il risultato è sempre 0.

Consideriamo di avere 2 variabili op1 e op2 con valori come segue:

Op1 = 0000 1101Op2 = 0001 1001

Il risultato dell'operazione OR sulle variabili op1 e op2 sarà

Result = 0001 0100

Come possiamo vedere, due variabili vengono confrontate bit per bit. Ogni volta che solo una variabile contiene il valore 1, il risultato è 0 altrimenti 0 sarà il risultato.

Scriviamo un semplice programma che dimostri operatori logici bit per bit.

#include 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();}

Produzione:

AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1

Operatori di spostamento bit per bit

Gli operatori di spostamento bit per bit vengono utilizzati per spostare / spostare i modelli di bit a sinistra oa destra. Sinistra e destra sono due operatori di spostamento forniti da 'C' che sono rappresentati come segue:

Operand << n (Left Shift)Operand >> n (Right Shift)

Qui,

  • un operando è un'espressione intera su cui dobbiamo eseguire l'operazione di shift.
  • 'n' è il numero totale di posizioni di bit che dobbiamo spostare nell'espressione intera.

L'operazione di spostamento a sinistra sposterà il numero "n" di bit sul lato sinistro. I bit più a sinistra dell'espressione verranno estratti e n bit con il valore 0 verranno riempiti sul lato destro.

L'operazione di spostamento a destra sposterà il numero "n" di bit sul lato destro. Gli 'n' bit più a destra dell'espressione verranno estratti e il valore 0 verrà riempito sul lato sinistro.

Esempio: x è un'espressione intera con i dati 1111. Dopo aver eseguito l'operazione di spostamento, il risultato sarà:

x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011

Gli operatori di turni possono essere combinati quindi può essere utilizzato per estrarre i dati dall'espressione intera. Scriviamo un programma per dimostrare l'uso degli operatori di spostamento bit per bit.

#include 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;}

Produzione:

Left shift - Value of c is 80Right shift - Value of c is 5

Dopo aver eseguito l'operazione di spostamento a sinistra, il valore diventerà 80 il cui equivalente binario è 101000.

Dopo aver eseguito l'operazione di spostamento a destra, il valore diventerà 5 il cui equivalente binario è 000101.

Operatore di complemento bit per bit

Il complemento bit per bit viene anche chiamato come operatore di complemento a uno poiché richiede sempre un solo valore o un operando. È un operatore unario.

Quando eseguiamo il complemento su qualsiasi bit, tutti gli 1 diventano 0 e viceversa.

Se abbiamo un'espressione intera che contiene 0000 1111, dopo aver eseguito l'operazione di complemento bit per bit il valore diventerà 1111 0000.

L'operatore di complemento bit per bit è indicato dal simbolo tilde (~).

Scriviamo un programma che dimostri l'implementazione dell'operatore di complemento bit per bit.

#include int main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}

Produzione:

Complement - Value of c is -11

Ecco un altro programma, con un esempio di tutti gli operati discussi finora:

#include 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; /*-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 );}

Dopo aver compilato ed eseguito il programma, produce il seguente risultato:

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

Sommario

  • Gli operatori bit per bit sono set di operatori speciali forniti da "C."
  • Sono utilizzati nella programmazione a livello di bit.
  • Questi operatori vengono utilizzati per manipolare i bit di un'espressione intera.
  • Logico, spostamento e complemento sono tre tipi di operatori bit per bit.
  • L'operatore di complemento bit per bit viene utilizzato per invertire i bit di un'espressione.