¿Hay algún momento en que & amp; & amp; (Y también) no importa más de & amp; (Y)
-
08-07-2019 - |
Pregunta
Si estoy evaluando dos variables y no dos llamadas a métodos, ¿importa el clima? Yo uso & amp; & amp; " o " & amp; "
//some logic that sets bool values
boolean X = true;
boolean Y = true;
if (X & Y){
// perform some operation
}
if (X && Y){
// perform some operation
}
Además, un libro que estoy usando para C # 3.0 / .NET 3.5 solo hace referencia a & amp; & amp; operador, es el & amp; ¿El operador se va?
Solución
Como se ha observado, & amp;
es el operador AND bit a bit. Las matemáticas binarias sin procesar parecen ser cada vez menos comunes con el tiempo, con un número creciente de desarrolladores que realmente no entienden la aritmética bit a bit. Lo cual puede ser un dolor a veces.
Sin embargo, hay muchas tareas que se resuelven mejor con ellas, en particular cualquier cosa que considere los datos como indicadores. El operador & amp;
es 100% necesario y no va a ninguna parte, simplemente no se usa con tanta frecuencia como el operador booleano de cortocircuito & amp; & amp;
.
Por ejemplo:
[Flags]
enum SomeEnum { // formatted for space...
None = 0, Foo = 1, Bar = 2 // 4, 8, 16, 32, ...
}
static void Main() {
SomeEnum value = GetFlags();
bool hasFoo = (value & SomeEnum.Foo) != 0;
}
static SomeEnum GetFlags() { ... }
Otros consejos
Utilice siempre & amp; & amp; si está realizando una prueba de lógica verdadera / falsa. Un solo & amp; realiza un bit-wise 'y'. Hace que funcione como una prueba lógica en algunos casos, pero no se garantiza que funcione para todos los casos lógicos. El uso más común de un solo & amp; es cuando se aplica una máscara de bits.
Ejemplos (& amp; & amp;):
true && true == true
Ejemplo (& amp;):
00101001 & 00100001 = 00100001
Si usa un solo & amp; (Y) se evalúa la segunda parte de la expresión. Esto podría ser malo si la segunda parte se basa en que la primera parte es verdadera. Por lo general, siempre use & amp; & amp; ya que la segunda parte no se evalúa si la primera parte es falsa.
Lógicamente, el & amp; realiza una operación bit a bit como han dicho otros, que todavía es válida para la comparación / evaluación booleana. Realmente la única vez que un solo & amp; (o |) debe usarse (o evaluación booleana) si la segunda evaluación siempre debe ejecutarse (si se trata de una llamada / modificador de función). Esta es una mala práctica y probablemente por qué el libro no lo menciona.
Single & amp; son útiles con enums de banderas y máscaras de bits.
Lo siguiente arrojará una excepción de obj es nulo:
bool b = obj != null & obj.IsActive
Pero esto funcionará:
bool b = obj != null && obj.IsActive
Esto es malo:
bool b = obj.IsActive && obj.SetActive(false);
bool b = obj.IsActive & obj.SetActive(false);
El & amp; El operador está aquí para quedarse.
& amp; es un operador bit a bit mientras & amp; & amp; es el operador AND. Dos operaciones completamente diferentes.
int a = 1;
int b = 2;
assert (a & b == 0)
assert (a && b == true)
EDITAR: Vaya ... este ejemplo no funciona en C #. Debería en C ++. Esperemos que ilustre la intención y la diferencia entre los dos operadores.