&& e || non sono operatori logici ma condizionali?

61

Sono un po 'confuso dalla documentazione di MSDN C # che afferma che & , | sono operatori logici e && e || sono operatori condizionali.

Continuo a chiamare && , || , ! operatori logici, quindi mi sbaglio?

    
posta John V 22.11.2017 - 18:14
fonte

3 risposte

118

I am a bit confused by the MSDN C# documentation which states that &,| are logical operators and && and || are conditional operators. I keep calling &&, ||, ! logical operators, so I am wrong?

No; hai ragione.

Vi sono 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 uso saggio del tempo. Vai alle specifiche se desideri una dichiarazione definitiva sul nome di una caratteristica di C #.

Quindi: l'autorità pertinente è la specifica C #, che afferma nella sezione 7.11:

The &, ^, and | operators are called the logical operators.

Quindi continua a suddividere ulteriormente gli operatori logici incorporati in operatori logici interi, enumerati, booleani e nullable-booleani. Esistono anche operatori logici definiti dall'utente; guarda le specifiche per i dettagli.

Nella sezione 7.12 abbiamo

The && and || operators are called the conditional logical operators. They are also called the “short-circuiting” logical operators.

Quindi tutti sono operatori logici . Alcuni di essi sono operatori logici condizionali .

Cosa rende condizionale gli operatori logici condizionali? Si potrebbe fare un'ipotesi plausibile perché è tipicamente usato nelle dichiarazioni condizionali ( if ) o espressioni condizionali ( ? : ). La vera ragione è data dalla specifica:

The && and || operators are conditional versions of the & and | operators: The operation x && y corresponds to the operation x & y, except that y is evaluated only if x is not false. The operation x || y corresponds to the operation x | y, except that y is evaluated only if x is not true.

Gli operatori logici condizionali sono così denominati perché l'operando della mano destra viene valutato condizionatamente a seconda del valore dell'operando della mano sinistra.

Possiamo vederlo in modo più vivido notando che gli operatori logici condizionali sono solo "zuccheri sintattici" per espressioni condizionali . x && y è semplicemente un modo più piacevole di scrivere x ? y : false e 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 'complicata. Vedi le specifiche per i dettagli.

Ulteriori letture, se questo argomento ti interessa:

risposta data 22.11.2017 - 18:55
fonte
26

In C # questi sono tutti operatori logici.

int x = 0xABCD & 0xFF // x == 0xCD

&& e || sono chiamati " condizionali operatori logici" perché sono cortocircuiti.

bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated, 
                                     // because x == 0xEF is false

Si noti che questa terminologia differisce da lingua a lingua. In C e C ++ && e || sono solo Operatori logici. In Java, & e | sono chiamati Operatori bit a bit , mentre C e C ++ li classifica come Operatori aritmetici .

    
risposta data 22.11.2017 - 18:18
fonte
-3

Il punto è che & e | sono operatori bitwise , vale a dire che vengono applicati e generano valori di stringa di bit. E bit a bit è un termine molto usato tra i programmatori.

Ad esempio 0xff & 0x00 == 0x00 , mentre 0xff | 0x00 == 0xff .

E && e || vengono applicati alle condizioni e producono i consueti valori delle condizioni; vale a dire true e false .

Ad esempio true && false == false , mentre true || false == true .

Pertanto && e || potrebbero essere chiamati operatori condizionali , anche se non è un termine usuale tra i programmatori.

Naturalmente, ogni programmatore C, C ++, Java e C # sa tutto questo. Ma suppongo che il frainteso avvenga perché "operatore condizionale" non è un termine frequentemente usato da noi programmatori.

    
risposta data 24.11.2017 - 01:18
fonte

Leggi altre domande sui tag