English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base del linguaggio C

Controllo di flusso del linguaggio C

Funzioni del linguaggio C

Array del linguaggio C

Puntatori del linguaggio C

Stringhe del linguaggio C

Struttura del linguaggio C

File del linguaggio C

Altro C

Manuale di riferimento del linguaggio C

Operatori bit del linguaggio C

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

Operatore AND bit &

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)

Esempio 1: AND bit

#include <stdio.h>
int main()
{
    int a = 12, b = 25;
    printf("Output = %d", a&b);
    return 0;
}

risultato di output

Output = 8

Operatore OU bit |

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)

Esempio 2: OU bit

#include <stdio.h>
int main()
{
    int a = 12, b = 25;
    printf("Output = %d", a|b);
    return 0;
}

risultato di output

Output = 29

Operatore XOR (esclusivo o) ^

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)

esempio 3: XOR bitwise

#include <stdio.h>
int main()
{
    int a = 12, b = 25;
    printf("Output = %d", a^b);
    return 0;
}

risultato di output

Output = 21

operatore di complemento a bitwise ~

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)

esempio 4: esempio di complemento a bitwise

#include <stdio.h>
int main()
{
    printf("Output = %d\n", ~35);
    printf("Output = %d\n", ~-12);
    return 0;
}

risultato di output

Output = -36
Output = 11

operatori di shift nel linguaggio C

Nel linguaggio C ci sono due operatori di shift:

  • operatore di shift a destra

  • operatore di shift a sinistra.

operatore di shift a destra

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)

operatore di shift a sinistra

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)

esempio #5: operatori di shift

#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