Operatore bit a bit nella programmazione C e C++
Pubblicato: 2022-12-09Nella RAM, i dati sono organizzati come una sequenza di byte. Ogni byte contiene otto bit consecutivi. Gli operatori bit per bit di C e C++ sono utili quando si desidera eseguire alcune operazioni aritmetiche su bit di dati. Sono molto più veloci e vengono occasionalmente utilizzati per migliorare l'efficienza di un programma. Lavorano su algoritmi bitwise che eseguono operazioni a livello di bit o manipolano i bit in vari modi.
I tipi di operatore bit a bit in C e C++:
- AND a bit
- OR bit a bit
- Bit a bit NON
- Or esclusivo bit a bit (XOR)
- Operatore di turno a sinistra
- Operatore di spostamento a destra
Entriamo nel dettaglio di ciascuno di essi:
Sommario
1. AND bit a bit:
L'operatore AND bit a bit in C o C++ utilizza una singola e commerciale (&). Prende due numeri come operandi ed esegue AND su tutti i loro bit. Il risultato è 1 solo se entrambi i bit sono 1. Se uno qualsiasi dei bit è 0, il risultato è 0. Essenzialmente, questo operatore binario in C & C++ prende l'AND logico dei bit in ogni posizione dei due numeri dati in forma binaria.
Esempio:
Supponiamo che la rappresentazione binaria di due numeri a e b sia:
a = 01011000
b = 10111001
Quindi a e b = 00011000
Come si vede dall'esempio precedente, il risultato mostra '1' solo in quei punti in cui entrambi i numeri a e b hanno 1. Per tutti gli altri posti, il risultato mostra '0'.
2. OR bit a bit:
In C e C++, l'OR bit per bit funziona in modo abbastanza simile all'AND bit per bit. L'unica differenza è che nell'operatore OR bit a bit, affinché la posizione del bit sia '1' nel risultato, solo uno dei due bit dovrebbe essere '1'. Questo operatore prende due numeri come operandi ed esegue OR su ogni bit dei due numeri.
Funziona nel modo seguente:
- Se entrambi i bit sono '1', il risultato è '1'.
- Se entrambi i bit sono '0', il risultato è '0'.
- Se uno qualsiasi dei bit è '1', il risultato è '1'.
È uno degli operatori bit a bit C++ più semplici e utilizzati. Il suo simbolo è la pipa |. Inoltre, è identico all'operatore logico booleano ||.
Esempio:
Supponiamo la rappresentazione binaria di due numeri a| b è:
a = 01101001
b = 10111000
Quindi, a| b = 11111001
3. Bitwise NOT:
Conosciuto anche come operatore NOT Bitwise, capovolge ogni bit nel risultato. Il suo simbolo è la tilde (~). Un modo semplice per ricordare il funzionamento di questo operatore è che la tilde è occasionalmente nota come twiddle e il complemento bit per bit manipola ogni bit. Significa che se hai un 1, il risultato è 0 e viceversa. In altre parole, questo operatore bit per bit in C e C++ accetta un numero e inverte tutti i bit.
Quando si determina il valore più grande possibile per qualsiasi numero senza segno, questo è uno degli operatori bit per bit C++ più utili .
Esempio:
numero intero senza segno = ~0;
Qui, 0 significa tutti 0: 00000000. Quindi, l'implementazione dell'operatore NOT Bitwise dà come risultato 1: 11111111. Poiché num è un intero senza segno, non devi preoccuparti dei bit di segno o del complemento a due. 1s è il numero più grande possibile nel risultato.
Una delle caratteristiche cruciali dell'operatore NOT Bitwise è il complemento a 2. Il complemento a 2 di un numero è uguale al complemento di quel numero più 1.
Esempio:
a = 00000000
Quindi, il suo complemento a 2 = -(11111111+1) = -00000000 = -0(decimal)
Nota: il complemento bit per bit di qualsiasi numero N è uguale a -(N+1).
Impara i corsi di sviluppo software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzata o programmi di master per accelerare la tua carriera.
4. OR esclusivo bit a bit (XOR):
L'operazione Exclusive-OR accetta due input e restituisce 1 se uno o l'altro input è 1. Ma il risultato è 0 se entrambi sono 1. Se entrambi gli input sono 0 o entrambi sono 1, il risultato è 0. Il risultato di XOR è 1 solo se i due bit sono diversi. Il simbolo di questo operatore binario in C e C++ è l'accento circonflesso (^). Inoltre, questo operatore bit per bit in C e C++ è abbreviato in XOR. Esegue l'operazione OR esclusivo su ogni coppia di bit. È essenziale notare che non esiste un operatore booleano corrispondente a questo operatore.
Esempio:
Supponiamo di avere due numeri come
a = 10101010
b = 01110010
Ora a ^ b = 10101010 ^ 01110010 = 11011000
Puoi capire XOR nel modo seguente. Supponiamo di avere qualche bit, 0 o 1, che chiami A. Ora, quando prendi A XOR 0, otterrai A indietro. Quindi, se A è 1, ottieni 1 e viceversa. Quando prendi A XOR 1, significa che capovolgi A. Quindi, se A è 1, ottieni 0 e viceversa.
Se implementi l'operazione XOR bit per bit due volte, ovvero hai due bit, A e B, e imposti C = A XOR B, quindi esegui C XOR B. In tal caso, il risultato che ottieni è A XOR B XOR C. Capovolge ogni bit di A due volte o non capovolge alcun bit. Quindi, ottieni semplicemente una A così com'è.
Puoi considerare l'operazione XOR binaria come una sorta di giocherellona selettiva. Se implementi XOR su due numeri, uno dei quali è tutti 1, il risultato è equivalente a un twiddle.
5. Operatore del turno di sinistra:
Questo operatore bit per bit sposta tutti i bit a sinistra di un certo numero di bit specificati. Le posizioni dei bit che l'operatore di spostamento a sinistra ha svuotato vengono riempite con 0. Il suo simbolo è <<.
In C o C++, funziona in modo tale che prima prende due numeri, sposta a sinistra i bit del primo operando e il secondo operando indica di quante posizioni spostare il numero.
Sintassi:
un <<= 5
Ecco l'esempio di programma C/C++ per implementare l'operatore di spostamento a sinistra:
int principale()
{
int a = 5;
un <<= 2;
contare << “x : ” << x << endl;
}
Uscita: a = 20
Corsi e articoli popolari sull'ingegneria del software
Programmi popolari | |||
Programma PG esecutivo in sviluppo software - IIIT B | Programma di certificazione Blockchain - PURDUE | Programma di certificazione della sicurezza informatica - PURDUE | Laurea Magistrale in Informatica - IIIT B |
Altri articoli popolari | |||
Stipendio per Cloud Engineer negli Stati Uniti 2021-22 | Stipendio di AWS Solution Architect negli Stati Uniti | Stipendio per sviluppatori di backend negli Stati Uniti | Stipendio per sviluppatore front-end negli Stati Uniti |
Salario per sviluppatore web negli Stati Uniti | Domande dell'intervista allo Scrum Master nel 2022 | Come iniziare una carriera nella sicurezza informatica nel 2022? | Opzioni di carriera negli Stati Uniti per studenti di ingegneria |
6. Operatore di spostamento a destra:
Questo operatore bit per bit sposta tutti i bit a destra di un certo numero di bit specificati. Il suo simbolo è >>. In C o C++, questo operatore prende prima due numeri, sposta a destra i bit del primo operando e il secondo operando specifica la quantità di spostamento sul numero.
Sintassi:
un >>= 5
Un esempio di programma C/C++ per implementare l'operatore di spostamento a destra:
int main() {
int a = 5;
un >> = 2;
contare << “x : ” << x << endl;
}
Uscita: a = 1
Corsi e articoli popolari sull'ingegneria del software
Programmi popolari | |||
Programma PG esecutivo in sviluppo software - IIIT B | Programma di certificazione Blockchain - PURDUE | Programma di certificazione della sicurezza informatica - PURDUE | Laurea Magistrale in Informatica - IIIT B |
Altri articoli popolari | |||
Stipendio per Cloud Engineer negli Stati Uniti 2021-22 | Stipendio di AWS Solution Architect negli Stati Uniti | Stipendio per sviluppatori di backend negli Stati Uniti | Stipendio per sviluppatore front-end negli Stati Uniti |
Salario per sviluppatore web negli Stati Uniti | Domande dell'intervista allo Scrum Master nel 2022 | Come iniziare una carriera nella sicurezza informatica nel 2022? | Opzioni di carriera negli Stati Uniti per studenti di ingegneria |
Quando dovresti usare gli operatori bit per bit in C e C++?
- Risparmia spazio:
Gli operatori bit per bit aiutano a risparmiare spazio. Un problema comune riscontrato quando si lavora a livello di singoli bit è che se si desidera più spazio o si vuole risparmiare tempo, potrebbe essere necessario riprogettare le enormi porzioni del programma. Ma l'uso di operatori bit per bit in C e C++ può eliminare le dipendenze; ad esempio, puoi utilizzare ~0 per ottenere il numero intero più grande possibile. Lo spostamento del bit per moltiplicare per due è un'operazione tipica. Pertanto, non influisce sulla leggibilità, a differenza dell'uso avanzato della manipolazione dei bit che può influire in alcuni casi.
- Crittografia:
Se stai lavorando su qualche tipo di crittografia o su un sistema che necessita di campi di bit da utilizzare per memorizzare gli attributi booleani.
Fatti univoci sugli operatori bit a bit
- L'OR bit per bit di due numeri è semplicemente la somma di quei numeri se non è coinvolto alcun riporto. Altrimenti, devi semplicemente aggiungere il loro AND bit a bit. Ad esempio, supponiamo che x = 5(101) e y = 2(010). Poiché non è coinvolto alcun riporto, la somma è semplicemente x|y. Ma, se ora cambiamo 'x' in 6 (110), la somma cambierà in x|y + x&y perché ora è coinvolto il riporto.
- L'operatore XOR bit per bit è il più prezioso dal punto di vista del colloquio tecnico. Un esempio di uno dei problemi di intervista relativi a questo è discusso qui. "Per il dato insieme di numeri costituito da tutti gli elementi che si verificano per un numero pari di volte tranne un numero, trova il numero dispari che si verifica." Devi fare XOR a tutti i numeri per risolvere questo problema.
- Gli operatori bit per bit di spostamento a destra ea sinistra non devono essere utilizzati per i numeri negativi. Il secondo operando, che determina il numero di turni, contiene un numero negativo, che porta a un comportamento indefinito in C e C++. Ad esempio, i risultati di 1 >>- 1 e 1 << -1 non sono definiti.
- Il comportamento non è specificato se lo spostamento del numero supera la capacità del numero intero. Ad esempio, 1 << 65 non è specificato se i numeri interi sono memorizzati nel formato a 64 bit.
- Nessuna operazione di spostamento si verifica se il secondo operando (quello che determina il numero di turni) è 0.
Inizia il tuo viaggio nell'informatica con UpGrad:
Se miri a conoscere in dettaglio lo sviluppo del frontend (JavaScript, HTML, CSS), il backend (NoSQL-MongoDB) e i microservizi, allora puoi seguire il corso di Master of Science in Computer Science di UpGrad . Offerto da IIIT Bangalore e LJMU Alumni Status, questo corso ti aiuta a intraprendere la tua carriera come ingegnere del software / sviluppatore full-stack con i giganti della tecnologia di tutto il mondo.
Il corso copre l'accesso gratuito al Career Transition Bootcamp per programmatori principianti e non esperti di tecnologia. In questo corso imparerai più di dieci linguaggi e strumenti di programmazione, preparandoti a fondo per assumere ruoli complessi nel settore.
Qual è l'uso degli operatori bit per bit in C++?
In C++, gli operatori bit per bit eseguono operazioni su dati interi a livello binario. Operano su schemi di bit che implicano la manipolazione di singoli bit. Pertanto, un'operazione bit per bit è nota anche come programmazione a livello di bit. Gli operatori bit a bit in C++ vengono utilizzati principalmente per calcoli più veloci poiché lavorano solo su due cifre, ad esempio 0 e 1. Questi operatori possono anche eseguire test e spostare i bit effettivi.
Puoi usare gli operatori di spostamento sinistro e destro insieme in un codice?
Sì, puoi combinare gli operatori di spostamento a sinistra e a destra e, successivamente, puoi estrarre i dati da un'espressione intera.
L'operatore complementare capovolge l'intera sequenza di codice?
No, non è così. Inverte gli 1 e gli 0. Quindi tutti gli 1 diventano 0 e viceversa.
Perché l'altro nome dell'operatore di complemento bit a bit è il proprio operatore di complemento?
Il motivo è che richiede sempre un solo operando o valore. È un operatore unario. Quando esegui un complemento su qualsiasi bit, tutti gli 0 diventano 1 e viceversa. Ad esempio, se si dispone di un'espressione intera con il valore 1111 0000. Dopo aver eseguito l'operazione di complemento bit per bit, il valore diventa 0000 1111.