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.