C - Operatori
Un operatore è un simbolo che dice al compilatore di eseguire specifiche funzioni matematiche o logiche. Il linguaggio C è ricco di operatori incorporati e fornisce i seguenti tipi di operatori:
- Operatori aritmetici
- Operatori relazionali
- Operatori logici
- Operatori bit per bit
- Operatori di assegnazione
- Operatori vari
In questo capitolo esamineremo il modo in cui ogni operatore lavora.
Operatori aritmetici
La tabella seguente mostra tutti gli operatori aritmetici supportati dal linguaggio C. Assumi variabileA detiene 10 e variabile B detiene 20 quindi -
Operatore | Descrizione | Esempio |
---|---|---|
+ | Aggiunge due operandi. | A + B = 30 |
- | Sottrae il secondo operando dal primo. | A - B = -10 |
* | Moltiplica entrambi gli operandi. | A * B = 200 |
/ | Divide il numeratore per il de-numeratore. | B / A = 2 |
% | Operatore modulo e resto di dopo una divisione intera. | B% A = 0 |
++ | L'operatore di incremento aumenta il valore intero di uno. | A ++ = 11 |
- | L'operatore di decremento riduce il valore intero di uno. | A-- = 9 |
Operatori relazionali
La tabella seguente mostra tutti gli operatori relazionali supportati da C. Assume variabile A detiene 10 e variabile B detiene 20 quindi -
Operatore | Descrizione | Esempio |
---|---|---|
== | Controlla se i valori di due operandi sono uguali o meno. Se sì, la condizione diventa vera. | (A == B) non è vero. |
! = | Controlla se i valori di due operandi sono uguali o meno. Se i valori non sono uguali, la condizione diventa vera. | (A! = B) è vero. |
> | Controlla se il valore dell'operando sinistro è maggiore del valore dell'operando destro. Se sì, la condizione diventa vera. | (A> B) non è vero. |
< | Verifica se il valore dell'operando sinistro è inferiore al valore dell'operando destro. Se sì, la condizione diventa vera. | (A <B) è vero. |
> = | Controlla se il valore dell'operando sinistro è maggiore o uguale al valore dell'operando destro. Se sì, la condizione diventa vera. | (A> = B) non è vero. |
<= | Controlla se il valore dell'operando sinistro è minore o uguale al valore dell'operando destro. Se sì, la condizione diventa vera. | (A <= B) è vero. |
Operatori logici
La tabella seguente mostra tutti gli operatori logici supportati dal linguaggio C. Assumi variabileA detiene 1 e variabile B tiene 0, quindi -
Operatore | Descrizione | Esempio |
---|---|---|
&& | Chiamato operatore AND logico. Se entrambi gli operandi sono diversi da zero, la condizione diventa vera. | (A && B) è falso. |
|| | Chiamato Operatore OR logico. Se uno dei due operandi è diverso da zero, la condizione diventa vera. | (A || B) è vero. |
! | Chiamato operatore NOT logico. Viene utilizzato per invertire lo stato logico del suo operando. Se una condizione è vera, l'operatore NOT logico la renderà falsa. | ! (A && B) è vero. |
Operatori bit per bit
L'operatore bit per bit lavora sui bit ed esegue operazioni bit per bit. Le tabelle di verità per &, | e ^ sono le seguenti:
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 A = 60 e B = 13 in formato binario, saranno i seguenti:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~ A = 1100 0011
La tabella seguente elenca gli operatori bit per bit supportati da C. Supponiamo che la variabile "A" contenga 60 e la variabile "B" ne contenga 13, quindi -
Operatore | Descrizione | Esempio |
---|---|---|
& | L'operatore AND binario copia un po 'nel risultato se esiste in entrambi gli operandi. | (A e B) = 12, ovvero 0000 1100 |
| | L'operatore OR binario copia un bit se esiste in uno degli operandi. | (A | B) = 61, ovvero 0011 1101 |
^ | L'operatore XOR binario copia il bit se è impostato in un operando ma non in entrambi. | (A ^ B) = 49, ovvero 0011 0001 |
~ | L'operatore di complemento di Binary One è unario e ha l'effetto di "ribaltare" i bit. | (~ A) = ~ (60), cioè. -0111101 |
<< | Operatore binario di spostamento sinistro. Il valore dell'operando sinistro viene spostato a sinistra del numero di bit specificato dall'operando destro. | A << 2 = 240 vale a dire, 1111 0000 |
>> | Operatore binario di spostamento a destra. Il valore dell'operando sinistro viene spostato a destra del numero di bit specificato dall'operando destro. | A >> 2 = 15 ovvero 0000 1111 |
Operatori di assegnazione
La tabella seguente elenca gli operatori di assegnazione supportati dal linguaggio C:
Operatore | Descrizione | Esempio |
---|---|---|
= | Operatore di assegnazione semplice. Assegna i valori dagli operandi del lato destro all'operando del lato sinistro | C = A + B assegnerà il valore di A + B a C |
+ = | Aggiungi operatore di assegnazione AND. Aggiunge l'operando destro all'operando sinistro e assegna il risultato all'operando sinistro. | C + = A è equivalente a C = C + A |
- = | Sottrai AND operatore di assegnazione. Sottrae l'operando destro dall'operando sinistro e assegna il risultato all'operando sinistro. | C - = A è equivalente a C = C - A |
* = | Moltiplica AND operatore di assegnazione. Moltiplica l'operando destro per l'operando sinistro e assegna il risultato all'operando sinistro. | C * = A è equivalente a C = C * A |
/ = | Divide AND operatore di assegnazione. Divide l'operando sinistro con l'operando destro e assegna il risultato all'operando sinistro. | C / = A è equivalente a C = C / A |
% = | Modulo AND operatore di assegnazione. Richiede il modulo utilizzando due operandi e assegna il risultato all'operando sinistro. | C% = A è equivalente a C = C% A |
<< = | Shift sinistro AND operatore di assegnazione. | C << = 2 è uguale a C = C << 2 |
>> = | Spostamento a destra e operatore di assegnazione. | C >> = 2 è uguale a C = C >> 2 |
& = | Operatore di assegnazione AND bit per bit. | C & = 2 è uguale a C = C & 2 |
^ = | OR esclusivo bit per bit e operatore di assegnazione. | C ^ = 2 è uguale a C = C ^ 2 |
| = | OR bit per bit inclusivo e operatore di assegnazione. | C | = 2 è uguale a C = C | 2 |
Operatori vari ↦ sizeof & ternary
Oltre agli operatori discussi sopra, ci sono alcuni altri importanti operatori tra cui sizeof e ? : supportato dal linguaggio C.
Operatore | Descrizione | Esempio |
---|---|---|
taglia di() | Restituisce la dimensione di una variabile. | sizeof (a), dove a è intero, restituirà 4. |
& | Restituisce l'indirizzo di una variabile. | &un; restituisce l'indirizzo effettivo della variabile. |
* | Puntatore a una variabile. | *un; |
? : | Espressione condizionale. | Se la condizione è vera? quindi valore X: altrimenti valore Y |
Precedenza degli operatori in C
La precedenza degli operatori determina il raggruppamento dei termini in un'espressione e decide come viene valutata un'espressione. Alcuni operatori hanno la precedenza maggiore di altri; ad esempio, l'operatore di moltiplicazione ha una precedenza maggiore dell'operatore di addizione.
Ad esempio, x = 7 + 3 * 2; qui, x è assegnato 13, non 20 perché l'operatore * ha una precedenza maggiore di +, quindi viene prima moltiplicato per 3 * 2 e poi somma in 7.
Qui, gli operatori con la precedenza più alta vengono visualizzati nella parte superiore della tabella, quelli con la priorità più bassa in fondo. All'interno di un'espressione, verranno valutati per primi gli operatori con precedenza più alta.
Categoria | Operatore | Associatività |
---|---|---|
Postfix | () [] ->. ++ - - | Da sinistra a destra |
Unario | + -! ~ ++ - - (tipo) * & sizeof | Da destra a sinistra |
Moltiplicativo | * /% | Da sinistra a destra |
Additivo | + - | Da sinistra a destra |
Cambio | << >> | Da sinistra a destra |
Relazionale | <<=>> = | Da sinistra a destra |
Uguaglianza | ==! = | Da sinistra a destra |
Bitwise AND | & | Da sinistra a destra |
Bitwise XOR | ^ | Da sinistra a destra |
OR bit per bit | | | Da sinistra a destra |
AND logico | && | Da sinistra a destra |
OR logico | || | Da sinistra a destra |
Condizionale | ?: | Da destra a sinistra |
Incarico | = + = - = * = / =% = >> = << = & = ^ = | = | Da destra a sinistra |
Virgola | , | Da sinistra a destra |