símbolo solo sharp operadores operador logicos jerarquia entre ejemplos diferente diferencia c# comparison operators

c# - solo - Diferencia entre | y || o & y && para comparación



símbolo de diferente en c# (7)

& y | son operadores binarios mientras || y && son booleanos.

La gran diferencia
(1 y 2) es 0, falso
(1 && 2) es verdadero

Posible duplicado:
Una explicación clara y profana de la diferencia entre | y || Cª# ?

¿Cuál es la diferencia entre comparar con | y || o & y && en C # y Javascript?

Ejemplos:

if(test == test1 | test1 == test2) or if(test == test1 || test1 == test2) if(test == test1 & test1 == test2) or if(test == test1 && test1 == test2)


& y | son operadores bit a bit que pueden operar tanto en enteros como en argumentos booleanos, y && y || son operadores lógicos que pueden operar solo con argumentos booleanos. En muchos idiomas, si ambos argumentos son booleanos, la diferencia clave es que los operadores lógicos realizarán una evaluación de cortocircuito y no evaluarán el segundo argumento si el primer argumento es suficiente para determinar la respuesta (por ejemplo, en el caso de &&, si el primero el argumento es falso, el segundo argumento es irrelevante).


(Asumiendo C, C ++, Java, JavaScript)

| y & son operadores bit a bit mientras || y && son operadores lógicos. Por lo general, querrías usar || y && para if declaraciones y bucles y tal (es decir, para sus ejemplos anteriores). Los operadores bit a bit son para configurar y verificar bits dentro de máscaras de bits.


La instancia en la que está utilizando un solo carácter (es decir, | o &) es una comparación bit a bit de los resultados. Siempre que su idioma evalúe estas expresiones en un valor binario, deberían devolver los mismos resultados. Sin embargo, como una mejor práctica, debe usar el operador lógico ya que eso es lo que quiere decir (creo).



The & y | generalmente son operaciones bit a bit.

Donde como && y || son generalmente operaciones lógicas.

Para propósitos de comparación, está perfectamente bien siempre que todo regrese a 1 o a 0. De lo contrario, puede devolver falsos positivos. Sin embargo, debes evitar esto para evitar errores difíciles de leer.


en C (y otros idiomas probablemente) un solo | o & es una comparación bit a bit.
El doble || o && es una comparación lógica.
Editar: Asegúrese de leer el comentario de Mehrdad a continuación sobre "sin cortocircuito"

En la práctica, como true es a menudo equivalente a 1 y false menudo es equivalente a 0 , las comparaciones bit a bit a veces pueden ser válidas y devolver exactamente el mismo resultado .

Hubo una vez un componente de software de misión crítica en el que ejecuté un analizador de código estático y que señalaba que se estaba utilizando una comparación bit a bit donde debería haber sido una comparación lógica. Dado que fue escrito en C y debido a la disposición de comparaciones lógicas, el software funcionó bien con cualquiera de los dos. Ejemplo:

if ( (altitide > 10000) & (knots > 100) ) ...