English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial, imparerai tutti e sei gli operatori bit nel linguaggio C attraverso esempi.
Nell'unità aritmetico-logica (posizionata all'interno del CPU), operazioni matematiche come addizione, sottrazione, moltiplicazione e divisione sono eseguite a livello di bit. Per eseguire operazioni a livello di bit nel linguaggio C, utilizzare gli operatori bit.
Operatore | Significato degli operatori |
---|---|
&& | AND bit |
| | OU bit |
^ | XOR bit |
~ | Complemento bit |
<< | Spostamento a sinistra |
>> | Spostamento a destra |
Se i bit corrispondenti di due operandi sono 1, l'output dell'AND bit è 1. Se uno dei bit di un operando è 0, il risultato del bit corrispondente è 0.
Supponiamo di eseguire l'operazione AND bit tra due interi 12 e 25.
12 = 00001100 (binario) 25 = 00011001 (binario) Operazione bit tra 12 e 25 00001100 &00011001 ________ 00001000 = 8 (decimale)
#include <stdio.h> int main() { int a = 12, b = 25; printf("Output = %d", a&b); return 0; }
risultato di output
Output = 8
Se almeno uno dei bit corrispondenti di due operandi è 1, l'output dell'OU bit è 1. Nel linguaggio C, l'operatore OU bit è rappresentato con |.
12 = 00001100 (binario) 25 = 00011001 (binario) Operazione OU bit tra 12 e 25 00001100 | 00011001 ________ 00011101 = 29 (decimale)
#include <stdio.h> int main() { int a = 12, b = 25; printf("Output = %d", a|b); return 0; }
risultato di output
Output = 29
Se i bit corrispondenti di due operandi sono opposti, il risultato dell'operazione XOR a bit è 1. È rappresentato con ^.
12 = 00001100 (binario) 25 = 00011001 (binario) operazione XOR bitwise di 12 e 25 00001100 ^ 00011001 ________ 00010101 = 21 (decimale)
#include <stdio.h> int main() { int a = 12, b = 25; printf("Output = %d", a^b); return 0; }
risultato di output
Output = 21
l'operatore di complemento a bitwise è un operatore unario (che agisce su un solo operando). Cambia 1 in 0 e 0 in 1. Si indica con ~.
35 = 00100011 (binario) complemento a bitwise di 35 〜00100011 ________ 11011100 = 220 (decimale)
#include <stdio.h> int main() { printf("Output = %d\n", ~35); printf("Output = %d\n", ~-12); return 0; }
risultato di output
Output = -36 Output = 11
Nel linguaggio C ci sono due operatori di shift:
operatore di shift a destra
operatore di shift a sinistra.
l'operatore di shift a destra sposta tutti i bit a destra di un numero specificato di posizioni. Si indica con >>.
212 = 11010100 (binario) 212 >> 2 = 00110101 (binario) [shift a destra di due posizioni] 212 >> 7 = 00000001 (binario) 212 >> 8 = 00000000 212 >> 0 = 11010100 (nessun shift)
l'operatore di shift a sinistra sposta tutti i bit a sinistra di un numero specificato di posizioni. Si indica con <<.
212 = 11010100 (binario) 212 << 1 = 110101000 (binario) [shift a sinistra di una posizione] 212 << 0 = 11010100 (shift 0) 212 << 4 = 110101000000 (binario) = 3392 (decimale)
#include <stdio.h> int main() { int num=212, i; for (i=0; i<=2; ++i) printf("destra di %d: %d\n", i, num>>i); printf("\n"); for (i=0; i<=2; ++i) printf("sinistra di %d: %d\n", i, num<<i); return 0; }
risultato di output:
destra di 0: 212 destra di 1: 106 destra di 2: 53 sinistra di 0: 212 Spostamento a sinistra 1: 424 Spostamento a sinistra 2: 848