Cosa sono gli operatori bit a bit?
In un programma per computer, gli operatori bit a bit sono operatori per la manipolazione di schemi di bit nelle espressioni. AND bit a bit, OR, OR esclusivo (XOR), NOT, spostamento a destra e spostamento a sinistra sono operazioni comuni. La maggior parte dei linguaggi di programmazione per computer include tutti e sei questi operatori. Vengono spesso utilizzati per impostare, cancellare o invertire singoli bit in programmi che controllano l'hardware del computer. Gli operatori bit a bit vengono spesso utilizzati anche negli algoritmi di crittografia e compressione dei dati.
Gli operatori bit a bit comuni sono generalmente rappresentati simbolicamente in linguaggi di programmazione come C, C ++ e Java. Sono utilizzati nelle espressioni come farebbero gli operatori aritmetici come i segni più o meno. L'operatore bit a bit AND è rappresentato con la e commerciale & , OR con la pipe | e XOR con il cursore ^ . NOT, noto anche come operatore del complemento, è indicato con una tilde ~ .
L'operatore di spostamento a destra utilizza un doppio cursore che punta verso destra >> . Al contrario, lo spostamento a sinistra è indicato da un doppio cursore a sinistra. Java include un'altra operazione di spostamento a destra, mostrata con un triplo cursore a destra >>> .
Gli operatori bit a bit applicano un'operazione logica a ciascuna coppia di bit nei loro operandi. NO, il turno destro e il turno sinistro hanno solo un vero operando; il secondo valore nelle operazioni a turni è il conteggio dei bit. Per capire meglio come funzionano gli operatori bit a bit, un individuo può visualizzare i propri operandi come numeri binari. Ad esempio, l'operatore complemento sposta ciascun bit del suo operando singolo nello stato opposto. Uno diventa uno zero e uno zero diventa uno. Il complemento del valore binario a 8 bit 00110101 è 11001010.
L'operatore AND ha due operandi. A poco a poco, un'operazione AND logica viene eseguita utilizzando un bit corrispondente di ciascun operando. Il risultato di ciascuna operazione di bit viene posizionato in quella posizione di bit del risultato complessivo. Ad esempio, l'operatore AND elaborerà il bit 7 di un operando con il bit 7 dell'altro operando. Il risultato verrà memorizzato nel bit 7 del risultato complessivo.
In un'operazione AND, entrambi i bit degli operandi devono essere uno affinché il risultato sia uno, altrimenti il risultato è zero. Ad esempio, se i valori binari a 8 bit degli operandi sono 00110101 e 11110000, il risultato sarà 00110000. Un uso comune dell'operatore AND è l'azzeramento di bit particolari nel risultato. Questo viene fatto posizionando gli zero in quelle posizioni di bit in uno degli operandi.
In un'operazione OR, entrambi i bit degli operandi devono essere zero affinché il risultato sia zero; in caso contrario, il risultato è uno. Un uso comune dell'operatore OR è di impostare alcuni bit del risultato su uno. Questo viene fatto inserendo quelli in quelle posizioni di bit in uno degli operandi. Per l'operazione XOR, il risultato è zero se entrambi i bit di operando sono zero o se entrambi i bit di operando sono uno, altrimenti il risultato è uno.
Lo spostamento a sinistra e lo spostamento a destra spostano i bit nell'operando a sinistra oa destra in base al numero specificato di posizioni dei bit. Uno spostamento logico a destra sposta uno zero nel bit più a sinistra come parte dello spostamento. Uno spostamento aritmetico a destra copia il bit più a sinistra, il bit del segno, prima dello spostamento nella stessa posizione dopo lo spostamento. Anche il bit originale viene spostato insieme al resto. Entrambi i tipi di spostamento a sinistra spostano uno zero nel bit più a destra.
Quando un operando viene spostato a destra, il bit più a destra prima dello spostamento viene semplicemente gettato via. Allo stesso modo, viene eliminato il bit più a sinistra prima di uno spostamento a sinistra. Non si avvolge all'altra estremità dell'operando.
Le operazioni di spostamento bit a bit dipendono dalla lingua e dall'implementazione. Ad esempio, in C e C ++, >> e << eseguono spostamenti logici se l'operando è un numero intero senza segno. Se l'operando è un numero intero con segno, è probabile che venga invece effettuato uno spostamento aritmetico. In Java, tutti gli operandi sono considerati firmati e i turni aritmetici vengono sempre eseguiti con >> e << . L'operatore >>> viene utilizzato per uno spostamento a destra logico, ma è comunque possibile eseguire accidentalmente uno spostamento a destra aritmetico senza un'attenta tipografia.
Possono sorgere complicazioni anche quando gli operandi hanno lunghezze di bit diverse o quando alcuni sono firmati e altri non firmati. Gli operatori bit a bit e le costanti numeriche nel mezzo di un'espressione complessa potrebbero non essere valutati come previsto. Bisogna fare attenzione a specificare la dimensione e la natura firmata / non firmata di ogni quantità nell'espressione. Questo può essere fatto con un'attenta tipografia o assegnazioni temporanee a tipi di variabili specifici nel codice del programma.