¿Hay algún momento en que & amp; & amp; (Y también) no importa más de & amp; (Y)

StackOverflow https://stackoverflow.com/questions/286250

  •  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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top