Una singola e commerciale (&) esegue un'operazione AND bit-wise; una doppia e commerciale (& &) esegue un'operazione AND booleana.
Un bit-saggio ed esegue un'operazione AND su ciascun bit di entrambi gli argomenti (quindi è chiamato "bit-saggio"). Pertanto l'output di un'operazione AND bit-saggio (o qualsiasi operazione bit-saggio) non sarà un valore booleano. Ecco alcuni esempi di bit-saggio e operazioni:
1001 & 0001 = 0001
1101 & 1111 = 1101
un booleano e opera su due valori booleani e restituisce un valore booleano:
true && true = true
false && true = false
corto circuito
un'operazione AND booleana (& &) può essere eseguito anche su due espressioni che restituiscono un valore booleano:
int a = 5;
int b = 10;
bool result = (a < 3) && (b > 3);
// result will be false;
Poiché la prima espressione (a < 3)
restituisce false
, il risultato non può essere true
perché ENTRAMBI le espressioni devono essere valutate a true
in modo che il risultato sia true
. Per questo motivo, la seconda espressione non verrà nemmeno valutata. Questo è chiamato "cortocircuito". Tuttavia, con un'operazione AND bit-wise, entrambe le espressioni devono essere valutate prima di eseguire l'operazione. Pertanto nella maggior parte delle situazioni in cui si desidera determinare se due elementi sono veri (booleano), il valore booleano AND (& &) sarà l'opzione migliore.
Nel tuo esempio, il codice di comparazione di singoli bit e.Modifiers
con singoli bit in Keys.Shift
. Nessuno dei due argomenti rappresenta un valore booleano e pertanto l'operazione è bit-wise (&) anziché booleana (& &).
fonte
2013-04-17 15:09:53
Google 'bit bit AND', quindi google' bit flag'. – mbeckish
possibile duplicato di [Cosa fa un singolo | o & significa?] (http://stackoverflow.com/questions/9736751/what-does-a-single-or-mean) –