Respuestas:
Estoy un poco confundido por la documentación de MSDN # C que establece que
&
y|
son operadores lógicos y que&&
y||
son los operadores condicionales. Sigo llamando&&
,||
y!
operadores lógicos, ¿entonces estoy equivocado?
No; Estás en lo correcto.
Existen numerosos errores de nomenclatura pequeños, en su mayoría sin importancia, en la documentación de MSDN; Traté de sacar la mayor cantidad posible de ellos, pero en los casos en que no es tan erróneo y engañoso, no siempre es un uso racional del tiempo. Vaya a la especificación si desea una declaración definitiva sobre el nombre de una característica de C #.
Entonces: la autoridad relevante es la especificación C #, que establece en la sección 7.11:
El
&
,^
y|
los operadores son llamados los operadores lógicos.
Luego continúa desglosando los operadores lógicos integrados en operadores lógicos enteros, de enumeración, booleanos y booleanos anulables. También hay operadores lógicos definidos por el usuario; Vea las especificaciones para más detalles.
En la sección 7.12 tenemos
Los operadores
&&
y||
se denominan operadores lógicos condicionales. También se denominan operadores lógicos de "cortocircuito".
Entonces todos ellos son operadores lógicos . Algunos de ellos son operadores lógicos condicionales .
¿Qué hace que los operadores lógicos condicionales sean condicionales ? Uno podría hacer una suposición engañosa de que se debe a que generalmente se usan en declaraciones condicionales ( if
) o expresiones condicionales ( ? :
). La verdadera razón viene dada por la especificación:
Los operadores
&&
y||
son versiones condicionales de los operadores&
y|
: la operaciónx && y
corresponde a la operaciónx & y
, excepto quey
se evalúa solo six
no es falsa. La operaciónx || y
corresponde a la operaciónx | y
, excepto quey
se evalúa solo six
no es verdadera.
Los operadores lógicos condicionales se denominan así porque el operando de la mano derecha se evalúa condicionalmente dependiendo del valor del operando de la mano izquierda.
Podemos ver esto más vívidamente al notar 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:
En C # estos son todos operadores lógicos.
int x = 0xABCD & 0xFF // x == 0xCD
&&
y ||
se denominan " operadores lógicos condicionales " porque están en cortocircuito.
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 Bitwise , mientras que C y C ++ los clasifica como Operadores Aritméticos .
El punto es que &
y |
están a nivel de bits los operadores, lo que significa que se aplican a y valores de cadena de bits de rendimiento. Y bitwise es un término muy utilizado entre los programadores.
Por ejemplo 0xff & 0x00 == 0x00
, mientras 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 true || false == true
.
Por lo tanto &&
, y ||
podría llamarse condicionales operadores, 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 el malentendido sucede porque "operador condicional" no es un término que los programadores usamos con frecuencia.
|
es intercambiable||
, aunque en muchos casos pueden intercambiarse sin un cambio aparente en el comportamiento del programa.