Sappiamo tutti che l'operatore logico &&
cortocircuito se l'operando di sinistra è false
, perché sappiamo che se un operando è false
, il risultato è anche false
.Perché il cortocircuito bit a bit e l'operatore non funzionano?
Perché l'operatore bit a bit &
non è in cortocircuito? Se l'operando di sinistra è 0
, allora sappiamo che il risultato è anche 0
. Ogni lingua che ho provato in (C, Javascript, C#) valuta entrambi gli operandi invece di fermarsi dopo il primo.
C'è qualche motivo per cui sarebbe una cattiva idea lasciare che l'operatore &
cortocircuito? In caso contrario, perché la maggior parte delle lingue non lo rendono cortocircuito? Sembra un'ovvia ottimizzazione.
Un motivo potrebbe essere quello di consentire gli effetti collaterali delle chiamate di funzione. –
Poiché gli operatori bit a bit vengono in genere utilizzati per, beh, operazioni bit a bit su operandi interi (e quelli generalmente corrispondono alle istruzioni di una singola macchina), si tratterà diversamente dall'ottimizzazione per introdurre un ulteriore condizionale per il controllo dei rari 0 casi. Perché la moltiplicazione non cortocircuita su 0? Bene, perché è una semplice operazione aritmetica che corrisponde ad una singola istruzione della macchina e verifica che nessuno controllerebbe mai ogni moltiplicazione per un operando 0. –
L'operatore '|' bit a bit poteva cortocircuitare se l'operando di sinistra era '0xFFFFFFFF'. –