Diferença entre os operadores lógico && e &

Prezados;]

Não consegui enteder a diferença de usar:

  1. && ou &
  2. || ou |

Agradeço desde já

2 curtidas

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

2 curtidas

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 :smiley:

&& – 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 &gt 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!