Prezados;]
Não consegui enteder a diferença de usar:
- && ou &
- || ou |
Agradeço desde já
Prezados;]
Não consegui enteder a diferença de usar:
Agradeço desde já
Olá,
o && voce compara as duas expressões:
exemplo
1 == 1 && 2 == 2 => só sera true se as duas condições forem verdadeiras.
o & é a mesma coisa mas ele compara bit a bit
com o || eu acredito que seja a mesma coisa:
1 ==1 || 2==2 > é true se uma das duas condições forem verdareiras.
Falou
Ricardo Cabral
Os operadores &&, || são lógicos, normalmente utilizados para avaliação de expressões lógicas.
Os operadores & e | são bit-wse, e operam com a lógica binária no nível de bits. Onde 0 equivale a falso e 1 a verdadeiro.
Exemplo:
0x55 & 0xf0 => 0x50.
Os operadores && e || atuam com o conceito de curto circuito.
Dependendo do resultado da primeira operação as segundas não são avaliadas. Exemplo:
true || ? == sempre true (não avalia o segundo operando).
false && ? == sempre false (não avalia o segundo operando).
fw
Um se chama “Short-Circuit” (ou algo bem parecido com isso) que quer dizer que se vc usa “&&” ele avalia a primeira expressão e se for falsa ele nem chega a analizar a segunda tendo em vista que será impossível resultar em um resultado verdadeiro, no outro modo pelo que vc imagina ele vai analizar sempre as 2 opções, por isso é costume utlizar “&&” e “||” porque digamos que economize “processamento”.
Acho que é isso, não deixem de me corrigir se estiver equivocado.
Espero ter ajudado
&& – if(op1 && op2){} op1 e op2 são verdadeiros, avalia condicionalmente op2.
|| – if(op1 || op2){} op1 ou op2 é verdadeiro, avalia condicionalmente op2
& – if(op1 & op2){} op1 e op2 são ambos verdadeiros, sempre avalia op1 e op2
| – if(op1 | op2){} op1 ou op2 é verdadeiro, sempre avalia op1 e op2.
se eu não estiver enganado
bit a bit
| e &
lógicos
|| e &&
a) (true | true)
dessa forma fará a leitura das duas
b) (true || true)
dessa forma fará a leitura apenas da primeira
pra que continuar sendo que a primeira já é true?
c) (false & true)
fará a leitura das duas
d) (false && true)
dessa forma fará a leitura apenas da primeira
pra que continuar sendo que a primeira já é false???
só acrescentando…
com o operador &&, caso a primeira expressão seja FALSE o compilador nem perde tempo em verificar a segunda expressão.
A mesma coisa para o |, caso a primeira expressão for TRUE ele nem testa a segunda.
abraços.
Veja este código de exemplo:
[code]public class Teste {
public static boolean cond(String caso, boolean p) {
System.out.println("Avaliando "+ caso + " - " + p);
return p;
}
public static void main(String args[]) {
// expressões lógicas
System.out.println("avaliando &");
boolean res = cond("1",true) & cond("1",false);
res = cond("2",false) & cond("2",true);
res = cond("3",true) & cond("3",true);
System.out.println("avaliando &&");
res = cond("1",true) && cond("1",false);
res = cond("2",false) && cond("2",true);
res = cond("3",true) && cond("3",true);
// expressões numéricas
System.out.println( 0x55 & 0x0f );
System.out.println( 0x02 | 0x01 );
System.out.println( 0x03 ^ 0x01 );
}
}
[/code]
Saída deste código:
[quote]avaliando &
Avaliando 1 - true
Avaliando 1 - false
Avaliando 2 - false
Avaliando 2 - true
Avaliando 3 - true
Avaliando 3 - true
avaliando &&
Avaliando 1 - true
Avaliando 1 - false
Avaliando 2 - false
Avaliando 3 - true
Avaliando 3 - true
5
3
2[/quote]
O operador ^ representa o OU EXCLUSIVO.
fw
Rulio;
Se a primeira expressão for “true” ele não testará a segunda com o operador “|”, fiquei com dúvida, pois nas respostas anteriores verifiquei que o teste fica somente na primeira se o operador for “||”.
Me informe se estiver entendido errado.
um grande abraço a todos.
[quote=Daniel Ilha]Rulio;
Se a primeira expressão for “true” ele não testará a segunda com o operador “|”, fiquei com dúvida, pois nas respostas anteriores verifiquei que o teste fica somente na primeira se o operador for “||”.
[/quote]
daniel,
você está correto …
deve ter sido um erro de digitação do nosso amigo …
Se vc tiver os 2 operadores ele só avaliará o 1º e dependendo da resposta ai sim o segundo com somente 1(um) operador ele sempre avaliará as 2 expressões
“&&” Avalia a 1ª e depois somente se a 1ª for verdadeira ele analiza a 2ª
Valeu pessoal
Espero ficar rápido como vocês um dia!
Em Ada existem os operadores "and" (que equivale ao "&" do Java) e "and then" (que equivale ao "&&"), assim como "or" ("|") e "or else" ("||"). Acho que nesse ponto Ada é mais fácil de entender que C++ ou Java (onde você tem de olhar esses detalhes microscópicos).
if Y /= 0 and then X/Y > Limit then begin
....
end;
if Ptr = null or else Ptr.I = 0 then begin
....
end;
(Em Ada o operador /= quer dizer "diferente de", e o operador "=" quer dizer "igual")
operador lógico && = afirmativa quando duas condições são true.
operador lógico || = afirmativa quando duas condições ou somente uma estão corretas.
[quote=lucasacsc19]operador lógico && = afirmativa quando duas condições são true.
operador lógico || = afirmativa quando duas condições ou somente uma estão corretas.
[/quote]
Não ressuscite um tópico de 8 anos de idade se não for dizer algo útil.
Sua resposta, embora correta, não tem a ver com a pergunta e não soma absolutamente nada as outras respostas já dadas no tópico.
Cara isso vem das proposições em logica…
|| seria o “ou ou”
&& seria o “e”
Portanto A || B - Ou é A ou é B - Se for algum for verdadeiro dos é true
A && B - É A e B - Tem que ser os dois verdadeiros…
int a = 1;
a < 2 || a>2 - A primeira proposição ta certa, mas a segunda não, como esse valor admiti qualquer sendo verdade entao tudo isso é Verdadeiro
a<2 && a>2 - A primeira está correta, porém a segunda não, como para esse valor logico tem que ser as duas verdades entao isso sera Falso
Pesquise sobre proposições logicas
|| equivale ao “ou ou”
&& equivale ao "e"
if else equivale ao “se então” e por ai vai…
Grato!