Respostas:
O único e comercial & é o operador AND lógico. O "e" comercial duplo && é novamente um operador AND lógico que emprega comportamento de curto-circuito. Curto-circuito significa apenas que o segundo operando (lado direito) é avaliado apenas quando o resultado não é totalmente determinado pelo primeiro operando (lado esquerdo)
A e B (A e B são avaliados)
A && B (B só é avaliado se A for verdadeiro)
d != 0 && 1/d
vs d !=0 & 1/d
- o primeiro garante nenhuma divisão por zero, o segundo não.
&
faz curto-circuito se em uma if
declaração. E &&
recebe entradas escalares. A resposta de @Loren abaixo está correta.
&&
e ||
tomar entradas escalares e sempre em curto-circuito. |
e &
pegar entradas de array e causar curto-circuito apenas em instruções if / while. Para atribuição, este último não causa curto-circuito.
Veja essas páginas de documentos para mais informações.
&
e |
em declarações if / while? Não parece ser o caso em R2012b e R2014a.
Como já foi mencionado por outros, &
é um operador AND lógico e &&
um operador AND de curto-circuito . Eles diferem em como os operandos são avaliados , bem como se operam ou não em matrizes ou escalares:
&
(Operador AND) e |
(operador OR) podem operar em matrizes de maneira elementar.&&
e ||
são versões de curto-circuito para as quais o segundo operando é avaliado apenas quando o resultado não é totalmente determinado pelo primeiro operando. Eles só podem operar em escalares , não em matrizes.Semelhante a outras linguagens, &
é um operador lógico bit a bit, enquanto &&
é uma operação lógica.
Por exemplo (perdoe minha sintaxe).
E se..
A = [True True False True]
B = False
A & B = [False False False False]
..ou..
B = True
A & B = [True True False True]
Para &&
, o operando direito só é calculado se o operando esquerdo for verdadeiro e o resultado for um único valor booleano.
x = (b ~= 0) && (a/b > 18.5)
Espero que esteja claro.
bitand
é o operador AND lógico bit a bit no MATLAB.
&& e || são operadores de curto-circuito operando em escalares. & e | operar em matrizes e usar curto-circuito apenas no contexto de expressões de loop if
ou while
.
Uma boa regra ao construir argumentos para uso em declarações condicionais (IF, WHILE, etc.) é sempre usar o && / || formulários, a menos que haja uma boa razão para não o fazer. Existem duas razões ...
Fazer isso, em vez de depender da resolução de vetores do MATLAB em & e |, leva a um código um pouco mais detalhado, mas MUITO mais seguro e fácil de manter.
r((r<2)&(r<2))
".
&
pode operar em matrizes, mas&&
só pode operar em escalares.