Sto cercando di capire la differenza tra & e & & operatori in C#. Ho cercato su internet senza molto successo. Qualcuno può spiegare con un esempio?Qual è la diffrenza tra & e && operatori in C#
risposta
Il primo è bitwise and il secondo è boolean and.
& è un bitwise operatore e & & è un logico operatore che si applica a bool
operandi.
ed è anche un operatore logico quando gli operandi sono bool. Vedere http://msdn.microsoft.com/en-us/library/sbf85k1c.aspx – GrahamS
&
è l'operatore AND bit a bit. Per gli operandi di tipi interi, calcolerà l'AND bit a bit degli operandi e il risultato sarà un tipo intero. Per gli operandi booleani, calcolerà la logica e gli operandi. &&
è l'operatore AND logico e non funziona sui tipi di intero. Per i tipi booleani, in cui possono essere applicati entrambi, la differenza è nella proprietà "cortocircuito" di &&
. Se il primo operando di &&
viene valutato su false
, il secondo non viene valutato affatto. Questo non è il caso di &
:
bool f() {
Console.WriteLine("f called");
return false;
}
bool g() {
Console.WriteLine("g called");
return false;
}
static void Main() {
bool result = f() && g(); // prints "f called"
Console.WriteLine("------");
result = f() & g(); // prints "f called" and "g called"
}
||
è simile a &&
in questa proprietà; valuterà solo il secondo operando se il primo assume valore falso.
Ovviamente, i tipi definiti dall'utente possono sovraccaricare questi operatori facendoli fare tutto ciò che vogliono.
Thanx Mehrad Vuoi dire '&' operando è uguale a '||' ... ?? – BreakHead
Quando viene utilizzato con tipi booleani '&' è un AND logico, '&&' viene descritto come "l'operatore AND-condizionale" (di Microsoft comunque). http://msdn.microsoft.com/en-us/library/2a723cdk.aspx – GrahamS
@BreakHead: No. '&&', '&' sono AND. '||', '|' sono OR. '&&' e '||' entrambi cortocircuiti, mentre '|' e '&' entrambi non cortocircuiti. –
Hai amico, L'operatore & & (Operatore logico) viene utilizzato nelle istruzioni condizionali. Per esempio
if(firstName == 'Tilsan' && lastName == 'Fighter')
{
Response.Write("Welcome Tilsan The Fighter!");
}
la dichiarazione Response.Write verrà eseguito solo se entrambe le variabili firstName e lastName partita alla loro condizione.
Mentre & (Bitwise Operator) operatore viene utilizzato per il binario e le operazioni, ad esempio, se scriviamo:
bool a, b, c;
a = true;
b = false;
c = a & b;
Response.Write(c); // 'False' will be written to the web page
Qui prima Binario E operazione verrà eseguita sulle variabili a e b, e il valore risultante sarà essere memorizzati in variabile c.
modo facile guardare è logico & valuterà entrambi i lati del & a prescindere se il lato sinistro è falso, mentre il corto circuito & & valuterà solo il lato destro se la sinistra è vero.
d=0;
n=10;
// this throws divide by 0 exception because it evaluates the
// mod even though "d != 0" is false
if ((d != 0) & (n % d) == 0)
Console.Writeline(d + " is a factor of " + n);
// This will not evaluate the mod.
if ((d != 0) && (n % d) == 0)
Console.Writeline(d + " is a factor of " + n);
Raccomando questo articolo da Dotnet Mob: http://dotnetmob.com/csharp-article/short-circuit-evaluation-in-c/
- & & è corto-circuito operatore logico
cercare e operazioni se uno degli operandi è risultata falsa espressione poi totale valutata a false, quindi non è necessario valutare le espressioni rimanenti, analogamente in operazione OR se si può saltare un qualsiasi degli operandi valutati a true, quindi la valutazione rimanente
- & L'operatore può essere utilizzato come operatore unario o binario. cioè, unario & può essere utilizzato per ottenere l'indirizzo del suo operando in un contesto non sicuro.
grazie per il riferimento dell'articolo – samurai
Secondo - C# 4.0 Il riferimento completo da Herbert Schildt
& - operatore logico AND
| - operatore logico OR
& & - in corto circuito e l'operatore
|| - Corto circuito o Operatore
Un semplice esempio può aiutare a capire il fenomeno
using System;
class SCops {
static void Main() {
int n, d;
n = 10;
d = 2;
if(d != 0 && (n % d) == 0)
Console.WriteLine(d + " is a factor of " + n);
d = 0; // now, set d to zero
// Since d is zero, the second operand is not evaluated.
if(d != 0 && (n % d) == 0)
Console.WriteLine(d + " is a factor of " + n);
// Now, try the same thing without the short-circuit operator.
// This will cause a divide-by-zero error.
if(d != 0 & (n % d) == 0)
Console.WriteLine(d + " is a factor of " + n);
}
}
Qui i & operatore controlla ogni operando e & & controlla solo il primo operando.
Come si può notare per operazioni 'AND' qualsiasi operando che è falso valuterà l'intera espressione su falso indipendentemente da qualsiasi altro valore di operandi nell'espressione. Questo modulo in cortocircuito aiuta a valutare la prima parte ed è abbastanza intelligente da sapere se la seconda parte sarà necessaria.
L'esecuzione del programma genera un errore di divisione per zero dell'ultima condizione if in cui entrambi gli operandi sono controllati per l'operatore & e non viene eseguita alcuna gestione delle eccezioni per affrontare il fatto che 'd' può essere 0 in qualsiasi momento di tempo.
Lo stesso caso si applica a '|' in C#.
Questo è leggermente diverso da C o C++ dove "&" e "|" erano operatori AND bit e OR bit. Tuttavia C# applica anche la natura bit a bit di & e | solo per le variabili int.
- 1. Qual è la diffrenza tra modalità interattiva e batch in Maven?
- 2. Qual è la diffrenza tra self.timer = nil vs [self.timer invalidate] in iOS?
- 3. Qual è la differenza tra * e gli operatori nella programmazione c?
- 4. Qual è la differenza tra Task e Thread?
- 5. Differenza tra operatori uguali (LINQ) e == (C#)?
- 6. Comma tra operatori in C++
- 7. qual è la diffrenza tra troncato ed elimina nel server sql?
- 8. Qual è la differenza tra C# e visual C#?
- 9. Qual è la differenza tra C++ gestito e C#?
- 10. Qual è la differenza tra strtok_r e strtok_s in C?
- 11. Qual è la differenza tra popen() e system() in C
- 12. Qual è la differenza tra CLR e DLR in C#?
- 13. Qual è la differenza tra Delegate e Azione in C#
- 14. Qual è la differenza tra memset e memcpy in C
- 15. Qual è la differenza tra oggetti e classi in C#?
- 16. Qual è la differenza tra l'utilizzo e l'inclusione in C++?
- 17. Qual è la differenza tra | e || in MATLAB?
- 18. Qual è la differenza tra & e && in MATLAB?
- 19. Qual è la differenza tra l'operatore "=" e "==" in Bash?
- 20. Qual è la differenza tra Managed C++ e C++/CLI?
- 21. Qual è la differenza tra l'estrazione tramite $ e @ in R?
- 22. Qual è la differenza tra 'eq' e '= ~' in Perl?
- 23. In tensorflow qual è la differenza tra tf.add e operator (+)?
- 24. Qual è la differenza tra `=` e `<-` in R?
- 25. Qual è la differenza tra operatori <> e! = In MySQL?
- 26. Qual è la differenza tra "Operatori Web" e "Lavoratori in background" su App Harbor
- 27. Qual è la differenza tra la partizione e la replica di un argomento nel cluster kafka
- 28. Qual è la differenza tra riordino e random_shuffle C++
- 29. Qual è la differenza tra C# e .NET?
- 30. Objective-C: Qual è la differenza tra forKey e forKeyPath?
& è un logico (booleano) e quando viene applicato ai booleani, non è tuttavia in cortocircuito come && –