You are on page 1of 2

3 Expresses como valores

Em C++ , todas as expresses so avaliadas. O resultado da avaliao um


valor e pode ser usado em quaisquer lugares.

3.1 Expresses aritmticas, relacionais e lgicas


Como voc j sabe, expresses usando operadores aritmticos, relacionais e
lgicos3 so avaliados. O valor resultante um nmero. Para os operadores
relacionais e lgicos, este nmero pode ser 0 (que significa falso) ou 1 (que
significa verdadeiro). Por exemplo:
3 + 5 * 4 % (2 + 8)

tem valor 3;

3 < 5

tem valor 1;

x + 1

tem valor igual ao valor da


varivel x mais um;

(x < 1) || (x > 4)

tem valor 1 quando o valor da


varivel x fora do intervalo
[1,4], e 0 quandox est dentro do
intervalo.

3.2 Expresses envolvendo o operador de atribuio (=)


O formato do operador de atribuio :

(1)

Um
(do ingls ``left-hand-side value'' - valor a esquerda) um valor
que se refere a um endereo na memria do computador. At agora, o nico
``lvalue'' vlido visto no curso o nome de uma varivel. A maneira que a
atribuio funciona a seguinte: a expresso do lado direito avaliada, e o
valor copiado para o endereo da memria associada ao ``lvalue''. O tipo do
objeto do ``lvalue'' determina como o valor da
memria.

armazenada na

Expresses de atribuio, assim como expresses, tm valor. O valor de uma


expresso de atribuio dado pelo valor da expresso do lado direito do =.
Por exemplo:

x = 3

tem valor 3;

x = y+1

tem o valor da expresso y+1.

Como consequncia do fato que atribuies serem expresses que so


associadas da direita para esquerda, podemos escrever sentenas como:
i = j = k = 0;

Que, usando parnteses, equivalente a i = (j = (k = 0)). Ou seja, primeiro


o valor 0 atribudo a k, o valor de k = 0 (que zero) atribudo a j e o valor
de j = (k = 0) (que tambm zero) atribudo ai.
Uma caracterstica muito peculiar de C++ que expresses de atribuio
podem ser usados em qualquer lugar que um valor pode ser usado. Porm
voc deve saber que us-lo dentro de outros comandos produz um efeito
colateral que alterar o valor da varivel na memria. Portanto, a execuo
de:
int quadrado, n = 2;
cout << "Quadrado de " << n << " eh menor que 50? " << ((quadrado
= n * n) < 50) << endl;

causa no apenas que o valor 4 seja impresso, como a avaliao da expresso


relacional dentro do cout faz com que o nmero 4 seja copiado para o
endereo de memria associado com a varivel quadrado. Note que
necessrio usar parnteses em quadrado = n * n j que = tem menor
precedncia que o operador relacional <.
Agora compare o exemplo anterior com o prximo, no qual o valor 4
impresso, mas sem nenhum efeito colateral:
int quadrado, n = 2;
cout << "Quadrado de " << n << " eh menor que 50? " << (n * n <
50) << endl;

Note que agora no h necessidade de parnteses para a


expresso n * n porque * tem maior precedncia que o operador relacional <.

You might also like