Inoltre, spiegheremo come eseguire il mascheramento dei bit con le operazioni logiche, poiché questo è qualcosa di molto utile nella programmazione ed è completamente correlato a questo tipo di operatori.
Descrizione delle operazioni bitwise
Le operazioni in bit sono logiche e le operazioni di spostamento vengono applicate individualmente a ciascun bit di una variabile. Ad esempio, se applichiamo l'operazione e tra le variabili "A" e "B", il bit 0 di "A" sarà collegato al bit 0 di "B", il bit 1 di "A" sarà collegato al bit 1 di "B" ", e così via.
Ogni bit opera e restituisce il proprio risultato e non ha alcuna influenza sul risultato dei bit adiacenti ad esso.
Questo tipo di operazione è molto utile nei bit di mascheramento quando si utilizzano flag di controllo o indicatori raggruppati in un singolo elemento di dati come un numero intero.
Come assegnare un valore binario a una variabile nella lingua C
Prima di iniziare a spiegare quali sono le operazioni logiche bitwise, diamo un'occhiata a come assegnare un valore a una variabile nel codice binario perché sebbene possiamo farlo in decimale, esadecimale o qualche altra rappresentazione, visualizzando 1s e 0s fa la programmazione molto più pratico e comprensibile. Ad esempio, nei casi in cui i bit rappresentano flag di controllo o indicatori raggruppati in una variabile INT, doppia o altra.
Per assegnare un valore a una variabile in formato binario, dobbiamo prefiggere la rappresentazione binaria con "0B". Il seguente snippet assegna il valore 131 o 0B10000011 all'intero “A” in formato binario e quindi visualizza la sua rappresentazione decimale nella console di comando.
#includereL'immagine seguente mostra il risultato per questo codice.
Rappresentare i valori binari nelle operazioni di bit e mascheratura rende la programmazione molto più fluida e comprensibile ed evita errori o conversioni che costano tempo.
Non operatore
L'operatore logico per il non è il simbolo "~".
L'operazione logica non o negazione è la più semplice di tutte, con un solo input e un output.
Questa operazione restituisce nella sua uscita il valore binario invertito del suo input.
Considera la seguente espressione per l'operazione logica non con l'input "A"
c = ~ aIl risultato in "c" è uguale a 1 se "a" è uguale a 0 e "c" è uguale a 0 se "a" è uguale a 1. Questa operazione è comunemente utilizzata per ottenere il valore complementare di una variabile.
Successivamente, guardiamo il tavolo della verità per l'operazione non.
UN | ~ | = | C |
0 | ~ | = | 1 |
1 | ~ | = | 0 |
Esempio:
In questo esempio, applicheremo l'operazione non alla variabile A per ottenere il suo complemento in "C"
Per fare ciò, creiamo la variabile A di tipo non firmato, gli assegniamo il valore 131 e otteniamo il risultato in "C". Quindi utilizziamo la funzione printf () per visualizzare il risultato nella console di comando. Di seguito, possiamo vedere il codice a questo scopo.
#includereNella figura seguente, vediamo il risultato del complemento di "A" . In questo caso, il complemento o l'inverso di 131 è 124 o 0111100 in rappresentanza binaria.
Logico e operatore
L'operatore logico per l'operazione e è il simbolo "&"
Vediamo la seguente espressione per la logica e il funzionamento tra le variabili A e B
c = a & b.Il risultato in "C" è uguale a 1 solo se "A" e "B" sono uguali a 1. In tutti gli altri casi, "C" è uguale a 0.
Successivamente, guardiamo il tavolo della verità per l'operazione e.
UN | E | B | = | C |
0 | E | 0 | = | 0 |
0 | E | 1 | = | 0 |
1 | E | 0 | = | 0 |
1 | E | 1 | = | 1 |
L'operazione logica ed è molto utile nel mascheramento dei bit. Più tardi vedremo una sezione che spiega questa tecnica in modo più dettagliato.
Esempio:
Ora, vediamo un esempio in cui eseguiamo il logico e il funzionamento tra le variabili "A" e "B" di tipo non firmato e memorizzare il risultato in "C" per visualizzarlo in seguito nella console di comando.
Assegniamo il valore 135 o 10000111 alla variabile “A” e 129 o 1000001 alla variabile “B” nella rappresentazione binaria. Quindi, useremo l'operatore "&" "per eseguire l'operazione. Successivamente, vedremo il codice per questo.
#includereL'immagine mostra il risultato di questo codice in cui l'operazione e tra "A" e "B" provoca 129 o 10000001 in binario.
Logico o operatore
L'operatore logico per l'operazione o è il simbolo ”| ".
Vediamo la seguente espressione per l'operazione logica o tra le variabili A e B
c = a | B.Il risultato in "C" sarà uguale a 1 solo se "A" o "B" o "A" e "B" è uguale a 1, mentre sarà uguale a 0 solo se "A" e "B" sono entrambi uguali.
Successivamente, guardiamo il tavolo della verità per l'operazione o.
A | | | B | = | C |
0 | | | 0 | = | 0 |
0 | | | 1 | = | 1 |
1 | | | 0 | = | 1 |
1 | | | 1 | = | 1 |
Esempio
In questo esempio vedremo come eseguire l'operazione logica o tra le variabili "A" e "B" di tipo non firmato e memorizzare il risultato in "C" per visualizzarlo in seguito nella console di comando.
Assegniamo il valore 128 o 10000000 alla variabile “A” e 3 o 00000011 alla variabile “B” nella rappresentazione binaria. Quindi, useremo l'operatore "|" per eseguire l'operazione. Successivamente, vedremo il codice per questa operazione.
#includereNell'immagine seguente, vediamo il risultato dell'operazione C = A | b che in questo caso è 131 o 10000011 in binario.
Operatore logico XOR o esclusivo o
L'operatore logico per l'operazione XOR è il simbolo " ^".
Vediamo la seguente espressione per l'operazione logica XOR tra le variabili A e B
c = a ^ b.Il risultato in "C" è uguale a 1 solo se uno dei bit "A" o "B" è uguale a 1, ma è 0 se "A" e "B" sono entrambi uguali a 1 o uguali a 0.
Questa operazione è essenziale negli additivi perché nel sistema binario 1 + 0 = 1 o 0 + 1 è anche uguale a 1. Ma 1 + 1 = 0 con carry al bit successivo. In questo caso, il trasporto viene eseguito dall'operazione e.
Successivamente, guardiamo il tavolo della verità per l'operazione XOR.
UN | ^ | B | = | C |
0 | ^ | 0 | = | 0 |
0 | ^ | 1 | = | 1 |
1 | ^ | 0 | = | 1 |
1 | ^ | 1 | = | 0 |
Esempio
Ora, guardiamo un esempio in cui eseguiamo l'operazione logica XOR tra le variabili "A" e "B" di tipo non firmato e memorizziamo il risultato in "C" per visualizzarlo più tardi nella console di comando.
Assegniamo il valore 135 o 10000111 alla variabile “A” e 3 o 00000011 alla variabile “B” nella notazione binaria. Quindi, useremo l'operatore " ^" per eseguire l'operazione logica. Successivamente, vedremo il codice per questo.
#includereCome possiamo vedere nell'immagine, il risultato è 10000100 e i bit i cui due ingressi sono = 1 xor risulta in 0.
Operatori con assegnazione
Gli operatori con assegnazione eseguono le stesse operazioni logiche che abbiamo visto prima, ma il loro risultato è memorizzato nell'operando che precede l'operatore.
La seguente espressione esegue la logica e il funzionamento tra la variabile "A" e la variabile o il valore assegnato dopo l'operatore e il risultato viene restituito in "A".
a & = 55;Operatori di rotazione
Gli operatori di rotazione sono "< > ".
Questi operatori spostano i dati di una variabile per bit "n" a sinistra o a destra, rispettivamente.
Nella seguente espressione, l'operatore sposta i dati memorizzati in "A" 5 bit a sinistra.
a = a < < 5Esempio
In questo esempio, assegneremo il valore 0B000001 alla variabile "A" e quindi sposteremo 1 bit a sinistra in un ciclo per loop e output il valore risultante nella console di comando. Questo ciclo si ripete 8 volte
#includereNella seguente immagine, vediamo il risultato con i valori decimali corrispondenti a ciascuna posizione dei bit in un carattere non firmato.
Mascheria un po '
In alcuni casi, come quando definiamo più flag di controllo raggruppate in un singolo registro, dobbiamo solo conoscere o modificare il valore di uno o più bit, non l'intero registro.
Per ottenere lo stato di uno o più bit specifici, dobbiamo definire una maschera che imposta solo i bit degli elementi il cui valore vogliamo conoscere a 1 e applicare l'operazione e l'operazione.
Ad esempio, se vogliamo ottenere il valore dei bit 0 e 2 di variabile "A", dobbiamo definire la seguente maschera ed eseguire il funzionamento e l'operazione.
00000101In questo caso, solo lo stato dei bit 0 e 2 verrà restituito di conseguenza, i bit rimanenti avranno il valore = 0, indipendentemente dal valore che hanno "A".
Per modificare il valore, dobbiamo applicare l'operazione o tra la maschera con i bit che vogliamo impostare su 1 e la variabile che vogliamo cambiare. Se vogliamo impostarlo su 0, dobbiamo invertire la maschera come mostrato di seguito e applicare l'operazione e l'operazione.
11111010Esempio
In questo esempio, usiamo il mascheramento dei bit per creare un convertitore semplice e pratico dai numeri decimali a una stringa con la sua rappresentazione binaria.
Per questa conversazione useremo 8 maschere, una per ogni bit, ma per rendere la programmazione più pratica e più chiara, useremo prima la maschera 10000000 e quindi sposteremo un bit a destra in ogni ciclo del ciclo. In questo modo, otterremo le seguenti 8 maschere di cui abbiamo bisogno.
10000000Il convertitore è costituito da un ciclo per 8 cicli, in ognuno dei quali interroga lo stato del bit corrispondente. Questo viene fatto da A e operazione tra i dati da convertire e la maschera corrispondente.
Se il risultato dell'operazione in "C" è 0, output questo valore con la funzione printf (). Altrimenti, se il valore del bit è 1, verrà stampato nella console di comando.
Di seguito è riportato il codice per questo comodo convertitore.
#includereNella seguente immagine, vediamo sotto il risultato della conversione per il numero 143.
Conclusione
In questo Suggerimento Linux Articolo, abbiamo spiegato ciascuno degli operatori logici e di rotazione che la lingua C fornisce per l'elaborazione bitwise. Per ciascuno di questi operatori, abbiamo creato una sezione che mostra il simbolo utilizzato per quella descrizione dell'operatore e un esempio pratico con frammenti di codice e immagini per ciascuno. Abbiamo anche incluso una sezione che si occupa di mascheramento dei bit e di ciò che è un'aggiunta, che è completamente correlata alle operazioni logiche di questo tipo.