&& y || ¿No son operadores lógicos sino condicionales?

61

Estoy un poco confundido por la documentación de MSDN C # que indica que & , | son operadores lógicos y && y || son operadores condicionales.

Sigo llamando a los operadores lógicos && , || , ! , ¿así que estoy equivocado?

    
pregunta John V 22.11.2017 - 18:14

3 respuestas

118
  

Estoy un poco confundido por la documentación de MSDN C # que indica que &, | son operadores lógicos y & & y || Son operadores condicionales. Sigo llamando & & amp ;, ||,! Operadores lógicos, ¿entonces me equivoco?

No; tienes razón.

En la documentación de MSDN hay numerosos errores de nomenclatura pequeños, en su mayoría sin importancia; Traté de sacar la mayor cantidad posible de ellos, pero en los casos en los que no es tan incorrecto ni engañoso, no siempre es un uso prudente del tiempo. Vaya a la especificación si desea una declaración definitiva sobre el nombre de una función de C #.

Entonces: la autoridad relevante es la especificación de C #, que se establece en la sección 7.11:

  

El & amp ;, ^, y | Los operadores se llaman operadores lógicos.

Luego continúa desglosando los operadores lógicos incorporados en operadores lógicos enteros, de enumeración, booleanos y nullable-booleanos. También hay operadores lógicos definidos por el usuario; ver la especificación para más detalles.

En la sección 7.12 tenemos

  

El & & y || Los operadores se denominan operadores lógicos condicionales. También se les llama operadores lógicos de "cortocircuito".

Todos ellos son operadores lógicos . Algunos de ellos son operadores lógicos condicionales .

¿Qué hace que los operadores lógicos condicionales condicionales ? Uno podría suponer que es porque normalmente se usan en sentencias condicionales ( if ) o expresiones condicionales ( ? : ). La razón real está dada por la especificación:

  

El & & y || los operadores son versiones condicionales de la & y | operadores: La operación x & & y corresponde a la operación x & y, excepto que y se evalúa solo si x no es falso. La operación x || y corresponde a la operación x | y, excepto que y se evalúa solo si x no es verdadera.

Los operadores lógicos condicionales se denominan así porque el operando de la mano derecha se evalúa condicionalmente según el valor del operando de la izquierda.

Podemos ver esto más vívidamente si notamos que los operadores lógicos condicionales son simplemente "azúcares sintácticos" para expresiones condicionales . x && y es simplemente una forma más agradable de escribir x ? y : false , y x || y es simplemente una forma más agradable de escribir x ? true : y . Las expresiones lógicas condicionales son en realidad expresiones condicionales.

También hay una forma definida por el usuario del operador lógico condicional, y es un poco complicado. Consulte la especificación para más detalles.

Lectura adicional, si este tema le interesa:

respondido por el Eric Lippert 22.11.2017 - 18:55
26

En C # estos son todos operadores lógicos.

int x = 0xABCD & 0xFF // x == 0xCD

&& y || se llaman " operadores lógicos condicionales " porque son short-circuiting.

bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated, 
                                     // because x == 0xEF is false

Tenga en cuenta que esta terminología difiere de un idioma a otro. En C y C ++, && y || son solo Operadores lógicos. En Java, & y | se llaman Operadores de Bitwise , mientras que C y C ++ los clasifican como Operadores aritméticos .

    
respondido por el Robert Harvey 22.11.2017 - 18:18
-3

El punto es que & y | son operadores a nivel de bits , lo que significa que se aplican a los valores de cadena de bits. Y bitwise es un término muy usado entre los programadores.

Por ejemplo, 0xff & 0x00 == 0x00 , mientras que 0xff | 0x00 == 0xff .

Y && y || se aplican a las condiciones y producen los valores habituales de las condiciones; es decir, true y false .

Por ejemplo, true && false == false , mientras que true || false == true .

Por lo tanto, && y || podrían llamarse operadores condicionales , a pesar de que no es un término habitual entre los programadores.

Por supuesto, todos los programadores de C, C ++, Java y C # saben todo eso. Pero supongo que lo mal entendido sucede porque "operador condicional" no es un término usado frecuentemente por los programadores.

    
respondido por el Hilton Fernandes 24.11.2017 - 01:18

Lea otras preguntas en las etiquetas