English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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:
Operatore | Descrizione | Esempio |
---|---|---|
+ | Aggiunge i due operandi | A + B avrà il valore 30 |
- | Sottrae il secondo operando dal primo | A - B avrà il valore -10 |
* | Moltiplica i due operandi | A * B avrà il valore 200 |
/ | Il numeratore diviso dal denominatore | B / A avrà il valore 2 |
% | L'operatore di modulo, rappresenta il resto della divisione intera | B % A avrà il valore 0 |
++ | L'operatore di incremento, aumenta il valore intero di 1 | A++ avrà il valore 11 |
-- | L'operatore di decremento, riduce il valore intero di 1 | A-- avrà il valore 9 |
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
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:
Operatore | Descrizione | Esempio |
---|---|---|
== | 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. |
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
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:
Operatore | Descrizione | Esempio |
---|---|---|
&& | 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. |
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
Gli operatori bitwise agiscono sui bit e eseguono operazioni bit per bit. Le tabelle di verità per &、 | e ^ sono come segue:
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
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:
Operatore | Descrizione | Esempio |
---|---|---|
& | 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 |
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
La tabella seguente elenca gli operatori di assegnazione supportati dal linguaggio C:
Operatore | Descrizione | Esempio |
---|---|---|
= | Operatore di assegnazione semplice, assegna il valore dell'operando di destra all'operando di sinistra | C = 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 sinistra | C += 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 sinistra | C -= 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 sinistra | C *= 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 sinistra | C /= A è equivalente a C = C / A |
%= | Operatore di modulo e assegnazione, calcola il modulo di due operandi e assegna il risultato all'operando di sinistra | C %= A è equivalente a C = C % A |
<<= | Operatore di shift a sinistra e assegnamento | C <<= 2 è equivalente a C = C << 2 |
>>= | Operatore di shift a destra e assegnamento | C >>= 2 è equivalente a C = C >> 2 |
&= | Operatore di AND bitwise e assegnamento | C &= 2 è equivalente a C = C & 2 |
^= | Operatore di XOR bitwise e assegnamento | C ^= 2 è equivalente a C = C ^ 2 |
|= | Operatore di OR bitwise e assegnamento | C |= 2 è equivalente a C = C | 2 |
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
La tabella elenca altri importanti operatori supportati dal linguaggio C, inclusi sizeof E ? :.
Operatore | Descrizione | Esempio |
---|---|---|
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 condizionale | Se la condizione è vera ? allora il valore è X : altrimenti il valore è Y |
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
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 |
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