Aggiornamento risposta - il mio originale era fuorviante e incompleto.
Per prima cosa dovrei scusarmi per molti dei miei commenti e risposte a questa domanda.
Dopo aver letto le specifiche, la distinzione tra operatori bit a bit e operatori condizionali è molto meno chiara.
Secondo la sezione 14.10 of ECMA-334:
Il &, ^, e | gli operatori sono chiamati gli operatori logici.
per operazioni intere:
1 L'operatore & calcola il bit logico dei due operandi, il | L'operatore calcola il bit logico OR dei due operandi e l'operatore^ calcola l'OR logico bit a bit esclusivo dei due operandi. 2 No sono possibili overflow da queste operazioni .
Secondo sezione 14.11:
Il & & e || gli operatori sono chiamati operatori logici condizionali . 2 Loro sono anche chiamati operatori di logica "cortocircuito" .
14.11.1
1 Quando gli operandi di & & o || sono di tipo bool, o quando gli operandi sono di tipi che non definiscono un operatore applicabile & o operatore |, ma lo fanno definiscono conversioni implicite di Bool, l'operazione viene elaborato come segue: 2 L'operazione x & & y è valutato come x? y: falso. 3 In altre parole, x è prima valutato e convertito in tipo bool. 4 Quindi, se x è vero, y è valutato e convertito in type bool, e questo diventa il risultato dell'operazione . 5 Altrimenti, il risultato di l'operazione è falso. 6 L'operazione x || y è valutato come x? true: y. 7 In altre parole, x è il primo valutato e convertito in tipo bool. 8 Quindi, se x è vero, il risultato di è true. 9 Altrimenti, y viene valutato e convertito in tipo bool e questo diventa il risultato dell'operazione .
14.11.2
1 Quando gli operandi & & o || sono di tipi che dichiarano un operatore applicabile definita dall'utente & o operatore |, entrambi seguente deve essere vero, dove T è del tipo in cui viene dichiarato il operatore selezionato: 2 Il tipo restituito e il tipo di ciascun parametro dell'operatore selezionato deve essere T. 3 In altre parole, l'operatore deve calcolare la logica AND o l'OR logico dei due operandi di tipo T, e deve restituire un risultato di tipo T. 4 T deve contenere dichiarazioni di operatore true e operatore false. Paragrafo 2 1 Un errore di compilazione si verifica se uno di questi requisiti non è soddisfatto. 2 Altrimenti, il & o || operazione viene valutata combinando definito dall'utente operatore vero o falso operatore con il selezionato operatore definito dall'utente: 3 Il operazione x & & y viene valutato come T.false (x)? x: T. & (x, y), dove T.false (x) è un'invocazione del operatore falso dichiarato in T, e T. & (x, y) è un invocazione del operatore selezionato & . 4 In altre parole, x viene prima valutato e l'operatore false viene invocato sul risultato a determinare se x è definitivamente falso. 5 Quindi, se x è definitivamente falso, il risultato dell'operazione è il valore precedentemente calcolato per x.6 Altrimenti, y viene valutato, e il operatore selezionato & viene richiamato dal valore precedentemente calcolato per xe il valore calcolato per y per produrre il risultato dell'operazione. 7 L'operazione x || y è valutato come T.true (x)? x: T. | (x, y), dove T.true (x) è una chiamata dell'operatore true dichiarato in T e T. | (x, y) è una chiamata dell'operatore selezionato | . 8 In altre parole, x viene prima valutato e l'operatore true viene invocato sul risultato per determinare se x è sicuramente true. 9 Quindi, se x è assolutamente true, il risultato dell'operazione è il valore precedentemente calcolato su x per x. 10 In caso contrario, y è valutato e l'operatore selezionato | viene invocato sul valore precedentemente calcolato per x e il valore calcolato per y per produrre il risultato dell'operazione . Paragrafo 3 1 In entrambe le operazioni, , l'espressione da x viene valutata solo una volta e l'espressione data da y non è valutata o valutata esattamente una volta. Paragrafo 4 1 Per un esempio di un tipo che implementa l'operatore true e l'operatore falso, consultare §18.4.2.
OK. Che ne pensi della valutazione pigra? Hai intenzione di dirlo? Perché se lo fai, posso cancellare la mia risposta più impopolare. –
La valutazione lenta è un sottoinsieme del modo operativo operativo logico. Dovrebbe essere menzionato, ma è irrilevante per la domanda. –
@ John Weldon: la domanda riguarda le differenze tra gli operatori. E la pigrizia è sicuramente una di queste. –