Breve panoramica degli operatori bit a bit
Un operatore è un simbolo che indica al compilatore di eseguire determinate operazioni matematiche o logiche. Esistono diversi tipi di operatori in C++, come:
- Operatori aritmetici
- Operatori logici
- Operatori Relazionali
- Operatori di assegnazione
- Operatori bit a bit
- Operatori vari
Tutti gli operatori Bitwise lavorano a livello di singolo bit. L'operatore bit a bit può essere applicato solo ai tipi di dati intero e carattere. Ad esempio, se si dispone di una variabile di tipo intero con la dimensione di 32 bit e si applica l'operazione NOT bit per bit, l'operatore NOT bit per bit verrà applicato per tutti i 32 bit. Quindi, alla fine, tutti i 32 bit nella variabile saranno invertiti.
In C++ sono disponibili sei diversi operatori bit a bit:
- OR bit per bit [rappresentato come "|"]
- AND bit per bit [rappresentato come "&"]
- Bitwise NOT [rappresentato come "~"]
- XOR bit per bit [rappresentato come "^"]
- Maiusc a sinistra bit per bit [rappresentato come "<<”]
- Maiusc a destra bit per bit [rappresentato come ">>"]
Tabella della verità OR bit a bit
L'operatore OR bit per bit produce 1 quando almeno un operando è impostato su 1. Ecco la tabella di verità per l'operatore OR bit per bit:
Bit-1 | Bit-2 | Bit-1 | Bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Tabella bit a bit E verità
L'operatore AND bit per bit produce 1 quando entrambi gli operandi sono impostati su 1. Ecco la tabella di verità per l'operatore AND bit per bit:
Bit-1 | Bit-2 | Bit-1 e Bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Tabella della verità NOT bit a bit
L'operatore NOT bit a bit inverte l'operando. Ecco la tabella di verità per l'operatore NOT bit a bit:
Bit-1 | ~Bit-1 |
---|---|
0 | 1 |
1 | 0 |
Tabella della verità XOR bit a bit
L'operatore XOR bit per bit produce 1 se, e solo se, uno degli operandi è impostato su 1. Ecco la tabella della verità per l'operatore AND bit per bit:
Bit-1 | Bit-2 | Bit-1 ^ Bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Operatore di spostamento a sinistra bit per bit
L'operatore Bitwise Left Shift sposta tutti i bit a sinistra del numero specificato di bit specificato. Se hai lasciato spostare tutti i bit dei dati di 1, i dati originali verranno moltiplicati per 2. Allo stesso modo, se hai lasciato spostare tutti i bit dei dati di 2, i dati originali verranno moltiplicati per 4.
Operatore di spostamento a destra bit per bit
L'operatore Bitwise Right Shift sposta tutti i bit a destra del numero specificato di bit specificati. Se sposti a destra tutti i bit dei dati di 1, i dati originali verranno divisi (divisione intera) per 2. Allo stesso modo, se sposti a destra tutti i bit dei dati di 2, i dati originali verranno divisi (divisione intera) per 4.
Esempi
Ora, poiché abbiamo compreso il concetto di base delle operazioni bit per bit, esaminiamo un paio di esempi, che ti aiuteranno a comprendere le operazioni bit per bit in C++:
- Esempio 1: Operatore OR bit per bit
- Esempio 2: Operatore AND bit per bit
- Esempio 3: operatore NOT bit a bit
- Esempio-4: Operatore XOR bit a bit
- Esempio 5: Operatore di spostamento a sinistra bit per bit
- Esempio 6: Operatore di spostamento a destra bit per bit
- Esempio-7: Imposta bit
- Esempio-8: Cancella Bit
Gli esempi 7 e 8 servono a dimostrare l'utilizzo nel mondo reale degli operatori bit a bit nel linguaggio di programmazione C++.
Esempio 1: Operatore OR bit per bit
In questo programma di esempio, dimostreremo l'operatore OR bit per bit.
#includere#includere
#includere
usando lo spazio dei nomi std;
// funzione display()
void display(stringa print_msg, int numero)
bitset<16> mioBitSet(numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
intero principale()
int primo_num = 7, secondo_num = 9, risultato = 0;
// Operazione OR bit per bit
risultato = primo_num | secondo_num;
// stampa i numeri di input
cout << endl;
display("Il primo numero è = ", first_num);
display("Il secondo numero è = ", secondo_num);
// stampa il valore di output
display("first_num | second_num = ", risultato);
cout << endl;
restituisce 0;
Esempio-2: Operatore AND bit per bit
In questo programma di esempio, illustreremo l'operatore AND bit per bit.
#includere#includere
#includere
usando lo spazio dei nomi std;
// funzione display()
void display(stringa print_msg, int numero)
bitset<16> mioBitSet(numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
intero principale()
int primo_num = 7, secondo_num = 9, risultato = 0;
// Operazione AND bit per bit
risultato = primo_num & secondo_num;
// stampa i numeri di input
cout << endl;
display("Il primo numero è = ", first_num);
splay("Il secondo numero è = ", secondo_num);
// stampa il valore di output
display("first_num & second_num = ", risultato);
cout << endl;
restituisce 0;
Esempio 3: operatore NOT bit a bit
In questo programma esempio, capiremo come funziona l'operatore NOT Bitwise in C++.
#includere#includere
#includere
usando lo spazio dei nomi std;
// funzione display()
void display(stringa print_msg, int numero)
bitset<16> mioBitSet(numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
intero principale()
int primo_num = 7, secondo_num = 9, risultato_1 = 0, risultato_2 = 0;
// Operazione NOT bit per bit
risultato_1 = ~primo_num;
risultato_2 = ~secondo_num;
// stampa i numeri di input e il valore di output
cout << endl;
display("Il primo numero è = ", first_num);
display("~first_num = ", risultato_1);
cout << endl;
// stampa i numeri di input e il valore di output
display("Il secondo numero è = ", secondo_num);
display("~second_num = ", risultato_2);
cout << endl;
restituisce 0;
Esempio-4: Operatore XOR bit a bit
Questo programma intende spiegare come funziona l'operatore Bitwise XOR in C++.
#includere#includere
#includere
usando lo spazio dei nomi std;
// funzione display()
void display(stringa print_msg, int numero)
bitset<16> mioBitSet(numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
intero principale()
int primo_num = 7, secondo_num = 9, risultato = 0;
// Operazione XOR bit per bit
risultato = primo_num ^ secondo_num;
// stampa i numeri di input
cout << endl;
display("Il primo numero è = ", first_num);
display("Il secondo numero è = ", secondo_num);
// stampa il valore di output
display("first_num ^ second_num = ", risultato);
cout << endl;
restituisce 0;
Esempio 5: Operatore di spostamento a sinistra bit per bit
Ora vedremo l'esempio dell'operatore Bitwise Left Shift. In questo programma abbiamo dichiarato due numeri, first_num e second_num di tipo interote. Qui, il "first_num" è spostato a sinistra di un bit e il "second_num" è spostato a sinistra di due bit.
#includere#includere
#includere
usando lo spazio dei nomi std;
// funzione display()
void display(stringa print_msg, int numero)
bitset<16> mioBitSet(numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
intero principale()
int primo_num = 7, secondo_num = 9, risultato_1 = 0, risultato_2 = 0;
// Operazione di spostamento a sinistra bit per bit
risultato_1 = primo_num << 1;
risultato_2 = secondo_num << 2;
// stampa i numeri di input e il valore di output
cout << endl;
display("Il primo numero è = ", first_num);
display("first_num << 1 = ", result_1);
cout << endl;
// stampa i numeri di input e il valore di output
display("Il secondo numero è = ", secondo_num);
display("secondo_num << 2 = ", result_2);
cout << endl;
restituisce 0;
Esempio 6: Operatore di spostamento a destra bit per bit
Ora vedremo un altro esempio per capire l'operatore Bitwise Right Shift. Abbiamo dichiarato due numeri, first_num e second_num di tipo intero. Qui, il "first_num" è spostato a destra di un bit e il "second_num" è spostato a destra di due bit.
#includere#includere
#includere
usando lo spazio dei nomi std;
// funzione display()
void display(stringa print_msg, int numero)
bitset<16> mioBitSet(numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
intero principale()
int primo_num = 7, secondo_num = 9, risultato_1 = 0, risultato_2 = 0;
// Operazione di spostamento a destra bit per bit
risultato_1 = primo_num >> 1;
risultato_2 = secondo_num >> 2;
// stampa i numeri di input e il valore di output
cout << endl;
display("Il primo numero è = ", first_num);
display("first_num >> 1 = ", risultato_1);
cout << endl;
// stampa i numeri di input e il valore di output
display("Il secondo numero è = ", secondo_num);
display("second_num >> 2 = ", risultato_2);
cout << endl;
restituisce 0;
Esempio-7: Imposta Bit
Questo esempio intende mostrare come impostare un particolare bit utilizzando operatori bit a bit.
#includere#includere
#includere
usando lo spazio dei nomi std;
// funzione display()
void display(stringa print_msg, int numero)
bitset<16> mioBitSet(numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
intero principale()
int primo_num = 7, secondo_num = 9;
// stampa il numero di input - first_num
cout << endl;
display("Il primo numero è = ", first_num);
// Imposta il quinto bit
primo_num |= (1UL << 5);
// Stampa l'output
display("Imposta il quinto bit di first_num = ", first_num);
cout << endl;
// stampa il numero di input - second_num
cout << endl;
display("Il secondo numero è = ", secondo_num);// Imposta il 6° bit
secondo_num |= (1UL << 6);
// Stampa l'output
display("Imposta il 6° bit di second_num = ", second_num);
cout << endl;
restituisce 0;
Esempio-8: Cancella Bit
Questo esempio intende mostrare come cancellare un particolare bit usando operatori bit a bit.
#includere#includere
#includere
usando lo spazio dei nomi std;
// funzione display()
void display(stringa print_msg, int numero)
bitset<16> mioBitSet(numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
intero principale()
int primo_num = 7, secondo_num = 9;
// stampa il numero di input - first_num
cout << endl;
display("Il primo numero è = ", first_num);
// Cancella il secondo bit
primo_num &= ~(1UL << 2);
// Stampa l'output
display("Imposta il 2° bit di first_num = ", first_num);
cout << endl;
// stampa il numero di input - second_num
cout << endl;
display("Il secondo numero è = ", secondo_num);
// Cancella il 3° bit
secondo_num &= ~(1UL << 3);
// Stampa l'output
display("Imposta il 3° bit di second_num = ", second_num);
cout << endl;
restituisce 0;
Conclusione
L'operatore bit a bit viene utilizzato principalmente per manipolare i singoli bit per il tipo di dati intero e carattere. L'operatore bit a bit è molto utilizzato nello sviluppo di software embedded. Quindi, se stai sviluppando un driver di dispositivo o un sistema molto vicino al livello hardware, potresti voler usare questi operatori bit a bit.