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

Lezioni di base del linguaggio C

Controllo del 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

Altri C

Manuale di riferimento del linguaggio C

Operatori del linguaggio C

Un operatore è un simbolo che informa il compilatore di eseguire un'operazione matematica o logica specifica. Il linguaggio C include una ricca gamma di operatori e offre i seguenti tipi di operatori:

  • Operatori aritmetici

  • Operatori di relazione

  • Logical operators

  • Operatori bitwise

  • Operatori di assegnazione

  • Operatori vari

Questo capitolo introduce uno per uno gli operatori aritmetici, logici, logici, bit, assegnazione e altri operatori.

Operatori aritmetici

La tabella seguente mostra tutti gli operatori aritmetici supportati dal linguaggio C. Supponiamo che la variabile A Il valore è 10, variabile B Il valore è 20, quindi:

OperatoreDescrizioneEsempio
+Aggiunge i due operandiA + B avrà il valore 30
-Sottrae il secondo operando dal primoA - B avrà il valore -10
*Moltiplica i due operandiA * B avrà il valore 200
/Il numeratore diviso dal denominatoreB / A avrà il valore 2
%L'operatore di modulo, rappresenta il resto della divisione interaB % A avrà il valore 0
++L'operatore di incremento, aumenta il valore intero di 1A++ avrà il valore 11
--L'operatore di decremento, riduce il valore intero di 1A-- avrà il valore 9

Esempio

Vedete l'esempio seguente per comprendere tutti gli operatori aritmetici disponibili nel linguaggio C:

#include <stdio.h>
 
int main()
{
   int a = 21;
   int b = 10;
   int c;
 
   c = a + b;
   printf("Linea 1 - Il valore di c è %d\n", c);
   c = a - b;
   printf("Linea 2 - Il valore di c è %d\n", c);
   c = a * b;
   printf("Linea 3 - Il valore di c è %d\n", c);
   c = a / b;
   printf("Linea 4 - Il valore di c è %d\n", c);
   c = a % b;
   printf("Linea 5 - Il valore di c è %d\n", c);
   c = a++; // Assegna e poi incrementa 1, c è 21, a è 22
   printf("Linea 6 - Il valore di c è %d\n", c);
   c = a--; // Assegna e poi riduci 1, c è 22, a è 21
   printf("Linea 7 - il valore di c è %d\n", c);
 
}

Quando il codice sopra viene compilato ed eseguito, produrrà i seguenti risultati:

Linea 1 - il valore di c è 31
Linea 2 - il valore di c è 11
Linea 3 - il valore di c è 210
Linea 4 - il valore di c è 2
Linea 5 - il valore di c è 1
Linea 6 - il valore di c è 21
Linea 7 - il valore di c è 22

Il seguente esempio dimostra la differenza tra a++ e ++a:

#include <stdio.h>
 
int main()
{
   int c;
   int a = 10;
   c = a++; 
   printf("Prima l'assegnazione poi l'operazione:\n");
   printf("Linea 1 - Il valore di c è %d\n", c);
   printf("Linea 2 - il valore di a è %d\n", a);
   a = 10;
   c = a--; 
   printf("Linea 3 - Il valore di c è %d\n", c);
   printf("Linea 4 - il valore di a è %d\n", a);
 
   printf("Prima l'operazione poi l'assegnazione:\n");
   a = 10;
   c = ++a; 
   printf("Linea 5 - Il valore di c è %d\n", c);
   printf("Linea 6 - il valore di a è %d\n", a);
   a = 10;
   c = --a; 
   printf("Linea 7 - il valore di c è %d\n", c);
   printf("Linea 8 - il valore di a è %d\n", a);
 
}

L'output dell'esecuzione del programma è il seguente:

Prima l'assegnazione poi l'operazione:
Linea 1 - il valore di c è 10
Linea 2 - il valore di a è 11
Linea 3 - il valore di c è 10
Linea 4 - il valore di a è 9
Prima l'operazione poi l'assegnazione:
Linea 5 - il valore di c è 11
Linea 6 - il valore di a è 11
Linea 7 - il valore di c è 9
Linea 8 - il valore di a è 9

Operatori di relazione

La tabella seguente mostra tutti gli operatori di relazione supportati dal linguaggio C. Supponiamo che la variabile A Il valore è 10, variabile B Il valore è 20, quindi:

OperatoreDescrizioneEsempio
==Verifica se i valori degli operanti sono uguali, se lo sono, la condizione è vera.(A == B) è falso.
!=Verifica se i valori degli operanti sono uguali, se non lo sono, la condizione è vera.(A != B) è vero.
>Verifica se il valore dell'operando sinistro è maggiore del valore dell'operando destro, se sì, la condizione è vera.(A > B) è falso.
<Verifica se il valore dell'operando sinistro è minore del valore dell'operando destro, se sì, la condizione è vera.(A < B) è vero.
>=Verifica se il valore dell'operando sinistro è maggiore o uguale al valore dell'operando destro, se sì, la condizione è vera.(A >= B) is false.
<=It checks if the value of the left operand is less than or equal to the value of the right operand, and if so, the condition is true.(A <= B) is true.

Esempio

See the following examples to understand all the available relational operators in C language:

#include <stdio.h>
 
int main()
{
   int a = 21;
   int b = 10;
   int c;
 
   if( a == b )
   {
      printf("Line 1 - a is equal to b\n");
   }
   else
   {
      printf("Line 1 - a is not equal to b\n");
   }
   if ( a < b )
   {
      printf("Line 2 - a is less than b\n");
   }
   else
   {
      printf("Line 2 - a is not less than b\n");
   }
   if ( a > b )
   {
      printf("Line 3 - a is greater than b\n");
   }
   else
   {
      printf("Line 3 - a is not greater than b\n");
   }
   /* Change the values of a and b */
   a = 5;
   b = 20;
   if ( a <= b )
   {
      printf("Line 4 - a is less than or equal to b\n");
   }
   if ( b >= a )
   {
      printf("Line 5 - b is greater than or equal to a\n");
   }
}

Quando il codice sopra viene compilato ed eseguito, produrrà i seguenti risultati:

Line 1 - a is not equal to b
Line 2 - a is not less than b
Line 3 - a is greater than b
Line 4 - a is less than or equal to b
Line 5 - b is greater than or equal to a

Logical operators

The following table shows all the relational logical operators supported by C language. Assume variable A If the value is 1, variable B If the value is 0, then:

OperatoreDescrizioneEsempio
&&Called logical AND operator. If both operands are non-zero, the condition is true.(A && B) is false.
||Called logical OR operator. If any of the operands is non-zero, the condition is true.(A || B) is true.
!Called logical NOT operator. It is used to reverse the logical state of the operand. If the condition is true, the logical NOT operator will make it false.!(A && B) is true.

Esempio

See the following examples to understand all the available logical operators in C language:

#include <stdio.h>
 
int main()
{
   int a = 5;
   int b = 20;
   int c;
 
   if ( a && b )
   {
      printf("Line 1 - Condition is true\n");
   }
   if ( a || b )
   {
      printf("Line 2 - Condition is true\n");
   }
   /* Change the values of a and b */
   a = 0;
   b = 10;
   if ( a && b )
   {
      printf("Line 3 - Condition is true\n");
   }
   else
   {
      printf("Line 3 - Condition is false\n");
   }
   if ( !(a && b) )
   {
      printf("Linea 4 - Condizione vera\n");
   }
}

Quando il codice sopra viene compilato ed eseguito, produrrà i seguenti risultati:

Linea 1 - Condizione vera
Linea 2 - Condizione vera
Linea 3 - Condizione falsa
Linea 4 - Condizione vera

Operatori bitwise

Gli operatori bitwise agiscono sui bit e eseguono operazioni bit per bit. Le tabelle di verità per &、 | e ^ sono come segue:

pqp & qp | qp ^ q
00000
01011
11110
10011

Supponiamo che A = 60 e B = 13, rappresentati in formato binario, sono come segue:

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

La tabella seguente mostra gli operatori bitwise supportati dal linguaggio C. Supponiamo che la variabile A è uguale a 60, variabile B Se il valore è 13, allora:

OperatoreDescrizioneEsempio
&

Operazione AND bitwise, che esegue un'operazione AND a bit su ciascun bit. Regole di calcolo:

0 & 0 = 0;   
0 & 1 = 0;    
1 & 0 = 0;     
1 & 1 = 1;
(A & B) otterrà 12, che è 0000 1100
|

Operatore di OR bitwise, che esegue un'operazione OR a bit su ciascun bit. Regole di calcolo:

0 | 0 = 0;   
0 | 1 = 1;   
1 | 0 = 1;    
1 | 1 = 1;
(A | B) otterrà 61, che è 0011 1101
^

Operatore di XOR, che esegue un'operazione XOR a bit su ciascun bit. Regole di calcolo:

0 ^ 0 = 0;   
0 ^ 1 = 1;   
1 ^ 0 = 1;  
1 ^ 1 = 0;
(A ^ B) otterrà 49, che è 0011 0001
~

Operatore di negazione, che esegue un'operazione di negazione a bit su ciascun bit. Regole di calcolo:

~1=0;   
~0=1;
(~A) otterrà -61, che è 1100 0011, la forma di complemento a due di un numero binario con segno.
<<Operatore di sinistra a bit. Sposta tutti i bit di un oggetto di calcolo di un certo numero di posizioni a sinistra (i bit di sinistra vengono scartati e i bit di destra vengono riempiti con 0).A << 2 otterrà 240, che è 1111 0000
>>Operatore di destra a bit. Sposta tutti i bit di un numero di un certo numero di posizioni a destra, riempi a sinistra con 0 per numeri positivi, con 1 per numeri negativi e discarta i bit di destra.A >> 2 otterrà 15, che è 0000 1111

Esempio

Vedete l'esempio seguente per comprendere tutti gli operatori di bitwise disponibili nel linguaggio C:

#include <stdio.h>
 
int main()
{
 
   unsigned int a = 60; /* 60 = 0011 1100 */  
   unsigned int b = 13; /* 13 = 0000 1101 */
   int c = 0;           
 
   c = a & b; /* 12 = 0000 1100 */ 
   printf("Linea 1 - Il valore di c è %d\n", c);
 
   c = a | b; /* 61 = 0011 1101 */
   printf("Linea 2 - Il valore di c è %d\n", c);
 
   c = a ^ b; /* 49 = 0011 0001 */
   printf("Linea 3 - Il valore di c è %d\n", c);
 
   c = ~a; /* -61 = 1100 0011 */
   printf("Linea 4 - Il valore di c è %d\n", c);
 
   c = a << 2; /* 240 = 1111 0000 */
   printf("Linea 5 - Il valore di c è %d\n", c);
 
   c = a >> 2; /* 15 = 0000 1111 */
   printf("Linea 6 - Il valore di c è %d\n", c);
}

Quando il codice sopra viene compilato ed eseguito, produrrà i seguenti risultati:

Linea 1 - Il valore di c è 12
Linea 2 - Il valore di c è 61
Linea 3 - Il valore di c è 49
Linea 4 - Il valore di c è -61
Linea 5 - Il valore di c è 240
Linea 6 - Il valore di c è 15

Operatori di assegnazione

La tabella seguente elenca gli operatori di assegnazione supportati dal linguaggio C:

OperatoreDescrizioneEsempio
=Operatore di assegnazione semplice, assegna il valore dell'operando di destra all'operando di sinistraC = A + B assegnerà il valore di A + B a C
+=Operatore di somma e assegnazione, assegna il risultato della somma dell'operando di destra con quello di sinistra all'operando di sinistraC += A è equivalente a C = C + A
-=Operatore di sottrazione e assegnazione, assegna il risultato della sottrazione dell'operando di sinistra per quello di destra all'operando di sinistraC -= A è equivalente a C = C - A
*=Operatore di moltiplicazione e assegnazione, assegna il risultato della moltiplicazione dell'operando di destra per quello di sinistra all'operando di sinistraC *= A è equivalente a C = C * A
/=Operatore di divisione e assegnazione, assegna il risultato della divisione dell'operando di sinistra per quello di destra all'operando di sinistraC /= A è equivalente a C = C / A
%=Operatore di modulo e assegnazione, calcola il modulo di due operandi e assegna il risultato all'operando di sinistraC %= A è equivalente a C = C % A
<<=Operatore di shift a sinistra e assegnamentoC <<= 2 è equivalente a C = C << 2
>>=Operatore di shift a destra e assegnamentoC >>= 2 è equivalente a C = C >> 2
&=Operatore di AND bitwise e assegnamentoC &= 2 è equivalente a C = C & 2
^=Operatore di XOR bitwise e assegnamentoC ^= 2 è equivalente a C = C ^ 2
|=Operatore di OR bitwise e assegnamentoC |= 2 è equivalente a C = C | 2

Esempio

Vediamo alcuni esempi per comprendere tutti gli operatori di assegnazione disponibili nel linguaggio C:

#include <stdio.h>
 
main()
{
   int a = 21;
   int c;
 
   c = a;
   printf("Line 1 - = operatore esempio, il valore di c = %d\n", c);
 
   c += a;
   printf("Line 2 - += operatore esempio, il valore di c = %d\n", c);
 
   c -= a;
   printf("Line 3 - -= operatore esempio, il valore di c = %d\n", c);
 
   c *= a;
   printf("Line 4 - *= operatore esempio, il valore di c = %d\n", c);
 
   c /= a;
   printf("Line 5 - /= operatore esempio, il valore di c = %d\n", c);
 
   c = 200;
   c %= a;
   printf("Line 6 - %= operatore esempio, il valore di c = %d\n", c);
 
   c <<= 2;
   printf("Line 7 - <<= operatore esempio, il valore di c = %d\n", c);
 
   c >>= 2;
   printf("Line 8 - >>= operatore esempio, il valore di c = %d\n", c);
 
   c &= 2;
   printf("Line 9 - &= operatore esempio, il valore di c = %d\n", c);
 
   c ^= 2;
   printf("Line 10 - ^= operatore esempio, il valore di c = %d\n", c);
 
   c |= 2;
   printf("Line 11 - |= operatore esempio, il valore di c = %d\n", c);
 
}

Quando il codice sopra viene compilato ed eseguito, produrrà i seguenti risultati:

Line 1 - = operatore esempio, il valore di c = 21
Line 2 - += operatore esempio, il valore di c = 42
Line 3 - -= operatore esempio, il valore di c = 21
Line 4 - *= operatore esempio, il valore di c = 441
Linea 5 - Esempio di operatore /=, il valore di c è 21
Linea 6 - Esempio di operatore %=, il valore di c è 11
Linea 7 - Esempio di operatore <<=, il valore di c è 44
Linea 8 - Esempio di operatore >>=, il valore di c è 11
Linea 9 - Esempio di operatore &=, il valore di c è 2
Linea 10 - Esempio di operatore ^=, il valore di c è 0
Linea 11 - Esempio di operatore |=, il valore di c è 2

Operatori speciali ↦ sizeof & ternario

La tabella elenca altri importanti operatori supportati dal linguaggio C, inclusi sizeof E ? :.

OperatoreDescrizioneEsempio
sizeof()Restituisce la dimensione della variabile.sizeof(a) restituirà 4, dove a è un intero.
&Restituisce l'indirizzo della variabile.&a; restituisce l'indirizzo della variabile.
*Pointera a una variabile.*a; pointera a una variabile.
? :Espressione condizionaleSe la condizione è vera ? allora il valore è X : altrimenti il valore è Y

Esempio

Ecco un esempio per comprendere tutti gli operatori speciali disponibili nel linguaggio C:

#include <stdio.h>
 
int main()
{
   int a = 4;
   short b;
   double c;
   int* ptr;
 
   /* Esempio di operatore sizeof */
   printf("Linea 1 - La dimensione della variabile a è %lu\n", sizeof(a));
   printf("Linea 2 - La dimensione della variabile b è %lu\n", sizeof(b));
   printf("Linea 3 - La dimensione della variabile c è %lu\n", sizeof(c));
 
   /* Esempio di operatori & e * */
   ptr = &a; /* 'ptr' ora contiene l'indirizzo di 'a' */
   printf("Il valore di a è %d\n", a);
   printf("*ptr è %d\n", *ptr);
 
   /* Esempio di operatore ternario */
   a = 10;
   b = (a == 1) ? 20 : 30;
   printf("Il valore di b è %d\n", b);
 
   b = (a == 10) ? 20 : 30;
   printf("Il valore di b è %d\n", b);
}

Quando il codice sopra viene compilato ed eseguito, produrrà i seguenti risultati:

Linea 1 - La dimensione della variabile a è 4
Linea 2 - La dimensione della variabile b è 2
Linea 3 - La dimensione della variabile c è 8
Il valore di a è 4
*ptr è 4
Il valore di b è 30
Il valore di b è 20

Priorità degli operatori in C

La priorità degli operatori determina la combinazione degli elementi nell'espressione. Questo influisce su come viene calcolata un'espressione. Alcuni operatori hanno una priorità più alta rispetto ad altri, ad esempio gli operatori di moltiplicazione e divisione hanno una priorità più alta rispetto agli operatori di addizione e sottrazione.

Ad esempio x = 7 + 3 * 2, in questo caso x viene assegnato il valore 13, non 20, perché l'operatore * ha una priorità più alta rispetto a +, quindi viene calcolata prima la moltiplicazione 3*2, poi viene aggiunta 7.

La tabella seguente elenca tutti gli operatori in ordine di priorità decrescente. Gli operatori con priorità più alta sono elencati in alto nella tabella, quelli con priorità più bassa in basso. Negli espressioni, gli operatori con priorità più alta vengono calcolati per primi.

Categoria Operatore Associatività 
Prefisso ( ) [] -> . ++ --  Da sinistra a destra 
Unario + - ! ~ ++ -- (type)* & sizeof Da destra a sinistra 
Moltiplicazione divisione modulo * / % Da sinistra a destra 
Addizione sottrazione + - Da sinistra a destra 
Spostamento << >> Da sinistra a destra 
Relazionale < <= > >= Da sinistra a destra 
Uguaglianza == != Da sinistra a destra 
Logico e AND bitwise & Da sinistra a destra 
Logico XOR bitwise ^ Da sinistra a destra 
Logico o OR bitwise | Da sinistra a destra 
Logico e AND && Da sinistra a destra 
Logico o OR || Da sinistra a destra 
Condizionale ?: Da destra a sinistra 
Assegnazione = += -= *= /= %= >>= <<= &= ^= |= Da destra a sinistra 
Virgola , Da sinistra a destra 

Esempio

Vediamo l'esempio seguente per comprendere la priorità degli operatori nel linguaggio C:

#include <stdio.h>
 
main()
{
   int a = 20;
   int b = 10;
   int c = 15;
   int d = 5;
   int e;
 
   e = (a + b) * c / d; // (30 * 15) / 5
   printf("Il valore di (a + b) * c / d è %d\n", e);
 
   e = ((a + b) * c) / d; // (30 * 15) / 5
   printf("Il valore di ((a + b) * c) / d è %d\n", e);
 
   e = (a + b) * (c / d); // (30) * (15/5)
   printf("Il valore di (a + b) * (c / d) è %d\n", e);
 
   e = a + (b * c) / d; // 20 + (150/5)
   printf("Il valore di a + (b * c) / d è %d\n", e);
  
   return 0;
}

Quando il codice sopra viene compilato ed eseguito, produrrà i seguenti risultati:

Il valore di (a + b) * c / d è 90
Il valore di ((a + b) * c) / d è 90
Il valore di (a + b) * (c / d) è 90
Il valore di a + (b * c) / d è 50