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
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.
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
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.