Dúvida com operadores [RESOLVIDO]

1. Dúvida com operadores [RESOLVIDO]

Augusto
LinuxMH

(usa BackTrack)

Enviado em 07/07/2013 - 00:21h

Ola,
bom o c++ oferece alguns operadores, porém estou com dúvida em três, os operadores são o e, ou e não.
bom eu uso o && , || e !, eu queria saber se and, or e not são mesma coisa, pela lógica é igual, e eu fiz alguns testes e deu mesmo resultado, mais queria saber se tem algum momento que pode dar resultados distintos


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/07/2013 - 11:54h

Rei Astro,

Pode dar referência dessa afirmação sobre precedência diferente? Não encontrei menção parecida no site que indiquei, nem na terceira edição do livro do Stroustrup. O livro do Stroustrup diz que a operção de e-lógico tem sempre prioridade mais alta que a de ou-lógico (§6.2) e que as versões textuais de &&, || e ! -- e, a esse respeito, todos os outros operadores relacionais e bit-a-bit -- são sinônimas dos operadores originais do C (§C.3.1, que fala sobre representações mais convenientes de certos tokens da linguagem que podem não estar disponíveis em máquinas cujos conjuntos de caracteres nativos não sejam compatíveis com ASCII).

O que você disse sobre precedência é válido em pelo menos uma outra linguagem (que, por sinal, eu uso -- e muito!): Perl. Mas no caso de Perl, especificamente, por mais que a linguagem tenha se inspirado na sintaxe do C, o caminho de evolução foi bem diferente.

cy2m@ephrata:/tmp [527]: expand -t 2 x.cc
#include <iostream>

int main(){
int a, b, c;
for(a=0; a<=1; a++)
for(b=0; b<=1; b++)
for(c=0; c<=1; c++)
std::cout <<
"a=" << a << ", b=" << b << ", c=" << c <<
" -- (a and b || c)=" << (a and b || c) <<
"; (a && b or c)=" << (a && b or c) << '\n'
;
}


$ g++ x.cc

$ ./a.out
a=0, b=0, c=0 -- (a and b || c)=0; (a && b or c)=0
a=0, b=0, c=1 -- (a and b || c)=1; (a && b or c)=1
a=0, b=1, c=0 -- (a and b || c)=0; (a && b or c)=0
a=0, b=1, c=1 -- (a and b || c)=1; (a && b or c)=1
a=1, b=0, c=0 -- (a and b || c)=0; (a && b or c)=0
a=1, b=0, c=1 -- (a and b || c)=1; (a && b or c)=1
a=1, b=1, c=0 -- (a and b || c)=1; (a && b or c)=1
a=1, b=1, c=1 -- (a and b || c)=1; (a && b or c)=1


cy2m@ephrata:/tmp [530]: expand -t 2 x.pl
#!/usr/bin/perl

for($a=0; $a<=1; $a++){
for($b=0; $b<=1; $b++){
for($c=0; $c<=1; $c++){
print
"a=$a, b=$b, c=$c -- ",
"(a and b || c)=", ($a and $b || $c),
"; (a && b or c)=", ($a && $b or $c), "\n"
;
}
}
}


$ ./x.pl
a=0, b=0, c=0 -- (a and b || c)=0; (a && b or c)=0
a=0, b=0, c=1 -- (a and b || c)=0; (a && b or c)=1
a=0, b=1, c=0 -- (a and b || c)=0; (a && b or c)=0
a=0, b=1, c=1 -- (a and b || c)=0; (a && b or c)=1
a=1, b=0, c=0 -- (a and b || c)=0; (a && b or c)=0
a=1, b=0, c=1 -- (a and b || c)=1; (a && b or c)=1
a=1, b=1, c=0 -- (a and b || c)=1; (a && b or c)=1
a=1, b=1, c=1 -- (a and b || c)=1; (a && b or c)=1


Eu sei que você programa com outras linguagens. Mas como o escopo aqui é C e C++, convém não confundir as coisas.

3. Re: Dúvida com operadores [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/07/2013 - 23:32h

Sim, são totalmente sinônimos.

Há uma referência muito boa de operadores de C++ e C na Wikipédia, em http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B.


4. Re: Dúvida com operadores [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 08/07/2013 - 08:44h

Na verdade não são sinônimos:

and = && (só que tem menos prioridade)
or = || (só que com menos prioridade)
! = not (só que com menos prioridade)

Ex.:

a and b || c -> significa: a e (b ou c )

a && b || c -> significa: (a e b) ou c

Observe que o resultado será diferente.


5. Re: Dúvida com operadores [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 08/07/2013 - 11:58h

Vou verificar, talvez tenha mesmo me confundido.


6. Re: Dúvida com operadores [RESOLVIDO]

Augusto
LinuxMH

(usa BackTrack)

Enviado em 08/07/2013 - 12:45h

Valeu, então realmente são sinônimos (;


7. Re: Dúvida com operadores [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 08/07/2013 - 17:52h

rei_astro escreveu:

Vou verificar, talvez tenha mesmo me confundido.


É isso mesmo testei com o seguinte código e vi que são mesmo sinônimos:


# include <iostream>

main(){
int a = 1;
int b = 2;
int c = 3;
if(a==5 && b==2 || c==3){
std::cout << "correto";
}
if(a==5 and b==2 || c==3){
std::cout << "correto";
}
}

Devo ter me confundido com outra linguagem.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts