Respostas:
Estou um pouco confuso com a documentação MSDN C #, que afirma que
&e|são operadores lógicos e que&&e||são operadores condicionais. Eu continuo ligando&&,||e!operadores lógicos, então estou errado?
Não; você está certo.
Existem inúmeros erros de nomenclatura pequenos, principalmente sem importância, na documentação do MSDN; Tentei divulgar o maior número possível deles, mas nos casos em que não é flagrantemente errado e enganoso, nem sempre é um uso sábio do tempo. Vá para a especificação se desejar uma declaração definitiva sobre o nome de um recurso C #.
Portanto: a autoridade relevante é a especificação C #, que afirma na seção 7.11:
A
&,^, e|os operadores são chamados os operadores lógicos.
Em seguida, ele divide ainda mais os operadores lógicos internos em operadores lógicos inteiro, enumeração, booleano e booleano anulável. Também existem operadores lógicos definidos pelo usuário; veja a especificação para detalhes.
Na seção 7.12, temos
Os operadores
&&e||são chamados de operadores lógicos condicionais. Eles também são chamados de operadores lógicos de "curto-circuito".
Então, todos eles são operadores lógicos . Alguns deles são operadores lógicos condicionais .
O que torna os operadores lógicos condicionais condicionais ? Pode-se fazer um palpite ilusório de que isso ocorre porque eles geralmente são usados em declarações condicionais ( if) ou expressões condicionais ( ? :). A verdadeira razão é dada pela especificação:
Os operadores
&&e||são versões condicionais dos operadores&e|: A operaçãox && ycorresponde à operaçãox & y, exceto queyé avaliada apenas sexnão for falsa. A operaçãox || ycorresponde à operaçãox | y, exceto queyé avaliada apenas sexnão for verdadeira.
Os operadores lógicos condicionais são assim nomeados porque o operando do lado direito é avaliado condicionalmente, dependendo do valor do operando do lado esquerdo.
Podemos ver isso mais claramente observando que os operadores lógicos condicionais são apenas "açúcares sintáticos" para expressões condicionais . x && yé simplesmente uma maneira mais agradável de escrever x ? y : falsee x || yé simplesmente uma maneira mais agradável de escrever x ? true : y. As expressões lógicas condicionais são realmente expressões condicionais.
Há também uma forma definida pelo usuário do operador lógico condicional, e é um pouco complicado. Veja a especificação para detalhes.
Leitura adicional, se este assunto lhe interessar:
Em C #, todos esses são operadores lógicos.
int x = 0xABCD & 0xFF // x == 0xCD
&&e ||são chamados de " operadores lógicos condicionais " porque estão em curto-circuito.
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
Observe que essa terminologia difere de idioma para idioma. Em C e C ++ &&e ||são apenas operadores lógicos. Em Java, &e |são chamados de Operadores bit a bit , enquanto C e C ++ classifica-los como operadores aritméticos .
O ponto é que &e |são operadores bit a bit , o que significa que eles são aplicados e produzem valores de cadeia de bits. E bit a bit é um termo muito usado entre programadores.
Por exemplo 0xff & 0x00 == 0x00, enquanto 0xff | 0x00 == 0xff.
E &&e ||são aplicados a condições, e deu os valores habituais de condições; ie truee false.
Por exemplo true && false == false, enquanto true || false == true.
Por isso &&e ||poderia ser chamado condicionais operadores, apesar de que não é um termo usual entre os programadores.
Obviamente, todo programador de C, C ++, Java e C # sabe tudo isso. Mas acho que o mal-entendido acontece porque "operador condicional" não é um termo usado com freqüência por nós programadores.
|seja intercambiável||, mesmo que em muitos casos eles possam ser trocados sem nenhuma mudança aparente no comportamento do programa.