Sono un po 'confuso dalla documentazione MSDN # C, che afferma che &
e |
sono operatori logici e che &&
e ||
sono operatori condizionali.
Continuo chiamando &&
, ||
e !
operatori logici, così mi sbaglio?
Sono un po 'confuso dalla documentazione MSDN # C, che afferma che &
e |
sono operatori logici e che &&
e ||
sono operatori condizionali.
Continuo chiamando &&
, ||
e !
operatori logici, così mi sbaglio?
Risposte:
Sono un po 'confuso dalla documentazione MSDN # C, che afferma che
&
e|
sono operatori logici e che&&
e||
sono operatori condizionali. Continuo chiamando&&
,||
e!
operatori logici, così mi sbaglio?
No; hai ragione.
Esistono numerosi errori di nomenclatura piccoli, per lo più non importanti nella documentazione MSDN; Ho cercato di tirarne fuori il maggior numero possibile, ma nei casi in cui non è egregiamente sbagliato e fuorviante, non è sempre un saggio uso del tempo. Vai alla specifica se desideri un'istruzione definitiva sul nome di una funzione C #.
Quindi: l'autorità pertinente è la specifica C #, che afferma nella sezione 7.11:
Il
&
,^
, e|
gli operatori sono chiamati gli operatori logici.
Quindi continua a suddividere ulteriormente gli operatori logici incorporati in operatori logici interi, enumerazione, booleani e nullable-booleani. Esistono anche operatori logici definiti dall'utente; vedere le specifiche per i dettagli.
Nella sezione 7.12 abbiamo
Gli operatori
&&
e||
sono chiamati operatori logici condizionali. Sono anche chiamati operatori logici di "corto circuito".
Quindi tutti sono operatori logici . Alcuni di essi sono operatori logici condizionali .
Cosa rende condizionali gli operatori logici condizionali ? Si potrebbe ipotizzare che ciò sia dovuto al fatto che sono in genere utilizzati in istruzioni condizionali ( if
) o espressioni condizionali ( ? :
). Il vero motivo è dato dalle specifiche:
Gli operatori
&&
e||
sono versioni condizionali degli operatori&
e|
: L'operazionex && y
corrisponde all'operazionex & y
, tranne chey
viene valutata solo sex
non è falsa. L'operazionex || y
corrisponde all'operazionex | y
, tranne chey
viene valutata solo sex
non è vera.
Gli operatori logici condizionali vengono così denominati perché l'operando di destra viene valutato in modo condizionale in base al valore dell'operando di sinistra.
Possiamo vederlo più vividamente osservando che gli operatori logici condizionali sono solo "zuccheri sintattici" per le espressioni condizionali . x && y
è semplicemente un modo più piacevole di scrivere x ? y : false
ed x || y
è semplicemente un modo più piacevole di scrivere x ? true : y
. Le espressioni logiche condizionali sono in realtà espressioni condizionali.
Esiste anche una forma definita dall'utente dell'operatore logico condizionale ed è un po 'complicato. Vedi le specifiche per i dettagli.
Ulteriori letture, se questo argomento ti interessa:
In C # questi sono tutti operatori logici.
int x = 0xABCD & 0xFF // x == 0xCD
&&
e ||
sono chiamati " operatori logici condizionali " perché sono in corto circuito.
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
Questa terminologia differisce da una lingua all'altra. In C e C ++ &&
e ||
sono solo operatori logici. In Java, &
e |
sono chiamati Bitwise Operators , mentre C e C ++ li classificano come Operatori aritmetici .
Il punto è che &
e |
sono bit a bit operatori, nel senso che sono applicati ai valori e stringhe di bit resa. E bit a bit è un termine molto usato tra i programmatori.
Ad esempio 0xff & 0x00 == 0x00
, mentre 0xff | 0x00 == 0xff
.
E &&
e ||
sono applicati alle condizioni e producono i soliti valori delle condizioni; ie true
e false
.
Ad esempio true && false == false
, mentre true || false == true
.
Pertanto &&
e ||
potrebbero essere chiamati operatori condizionali , anche se non è un termine comune tra i programmatori.
Ovviamente, ogni programmatore C, C ++, Java e C # lo sa. Ma immagino che l'incomprensione si verifichi perché "operatore condizionale" non è un termine spesso usato da noi programmatori.
|
sia intercambiabile||
, anche se in molti casi possono essere scambiati senza cambiamenti apparenti nel comportamento del programma.