Você está na página 1de 3

Centro Tecnológico de Mecatrônica / Centro Tecnológico Automotivo

Disciplina PROGRAMAÇÃO
Instrutor DANIEL CORTELETTI

OPERADORES

São os símbolos usados para realizar operações lógicas e aritméticas, estabelecendo também a prioridade e
formato destas operações.

Abaixo uma breve tabela dos operadores, apresentada de forma objetiva e resumida.

Categoria Operador Ação Exemplos Obs.


Atribuição e prioridade

A atribuição indica que tudo que está a sua


int x = 5;
direita será computado, resolvido e a
Atribuição x = 20;
= solução obtida será armazenada na área
(recebe) a = x + y / 2;
de memória (variável) indicada a sua
x=y=z=105;
esquerda.
Em uma expressão, os parênteses indicam
o que será executado prioritariamente. No
() Prioridade x = 20 * (3 + 1);
exemplo citado, caso não fosse utilizado, a
multiplicação ocorreria antes da soma.
+ Soma x = a + b; Retorna a soma de dois elementos.
Subtração ou x = a – b;
- Subtração ou inversão de sinal.
Inversão de sinal x = -x;
Aritméticos

Multiplicação. Assim como a divisão, tem


* Multiplicação x = a * b; prioridade sobre a soma e a subtração.
Divisão. Quando feita com valores inteiros,
/ Divisão x = a / b;
o resultado também é um inteiro.
Somente para valores inteiros, retorna o
Resto de divisão
% x = a % b; resto da divisão do primeiro termo pelo
(somente inteiros)
segundo.
if (a > b) ...; Retorna (1) se o primeiro operando for
> Maior que
x = a > b; maior que o segundo, e (0) caso contrário.
Retorna (1) se o primeiro operando for
if (a >= b) ...;
>= Maior ou igual a maior ou igual ao segundo. Caso contrário,
x = a >= b;
retorna (0).
Relacionais

if (a < b) ...; Retorna (1) se o primeiro operando for


< Menor que
x = a < b; menor que o segundo, e (0) caso contrário.
Retorna (1) se o primeiro operando for
if (a <= b) ...;
<= Menor ou igual a menor ou igual ao segundo. Caso
x = a <= b;
contrário, retorna (0).
if (a == b) ...; Retorna (1) se o primeiro operando for
== Igual
x = a == b; igual ao segundo, e (0) se for diferente.
if (a != b) ...; Retorna (1) se o primeiro operando for
!= Diferente
x = a != b; diferente que o segundo, e (0) se for igual.
Retorna verdadeiro (1) somente se o
if ((a > b) && (a >
primeiro operando for verdadeiro e o
&& E (AND) c)) ...;
segundo operando também for
x = (a && c);
verdadeiro.
Lógicos

Retorna verdadeiro (1) se pelo menos um


if ((a > b) || (a >
dos operandos for verdadeiro. Se ambos
|| OU (OR) c)) ...;
forem falso (0), o valor retornado será falso
x = (a || c);
(0).
Retorna o valor lógico invertido.
if (!(a > b))...;
! NÃO (NOT) verdadeiro = !falso
x = !a;
falso = !verdadeiro

Impresso em 03/08/2000 11:24:00 AM– Página 1


Centro Tecnológico de Mecatrônica / Centro Tecnológico Automotivo
Disciplina PROGRAMAÇÃO
Instrutor DANIEL CORTELETTI

Operação binária E entre os bits de dois números


binários. Se o bit n de ambos os valores estiverem
& AND (E) x = a & b;
ligados, o bit n do resultado também estará ligado.
1010 & 0110 = 0010
Operação binária OU entre os bits de dois números
binários. Se o bit n do primeiro valor, ou do segundo
| OR (OU) x = a | b; valor, ou de ambos estiver ligado, o bit n do resultado
também estará ligado.
1010 | 0110 = 1110
Operação binária OU EXCLUSIVO entre os bits de
dois números binários. Se o bit n do primeiro valor
estiver ligado e o bit n do segundo valor desligado, ou
Bit a Bit

XOR (OU
^ x = a ^ b; se o bit n do primeiro valor estiver desligado, e do
exclusivo)
segundo valor ligado, o bit n do resultado estará
ligado.
1010 ^ 0110 = 1100
Inverte o valor de todos os bits.
~ NOT (NÃO) x = ~a;
~ 0101 = 1010
RIGHT SHIFT Desloca os bits para direita, um determinado número
(Deslocamento x = a >> 1; de casas.
>>
de bits para x = a >> 3; 0101 >> 1 = 0010
direita) 0101 >> 2 = 0001
LEFT SHIFT Desloca os bits para esquerda, um determinado
(Deslocamento x = a << 1; número de casas.
<<
de bits para x = a << 2; 0101 << 1 = 1010
esquerda) 0101 << 2 = 0100

Operadores avançados :

Incremento de 1. Se usado antes da variável, o valor da


x++; variável é incrementado ante do uso da mesma. Se
++ Incremento
++x; aparecer depois, o valor é incrementado após o uso da
mesma.
x--; Similar ao anterior, realizando o decremento da
-- Decremento
--x; variável.
+= Incremento x += 10; O exemplo equivale a x = x + 10;
-= Decremento x -= 10; O exemplo equivale a x = x – 10;
*= Produto x *= 10; O exemplo equivale a x = x * 10;
/= Divisão x /= 10; O exemplo equivale a x = x / 10;
%= Resto da divisão x %= 10; Equivale a x = x % 10;
<<= Rotação esquerda x <<= 1; Equivale a x = x << 1;
>>= Rotação direita x >>= 1; Equivale a x = x >> 1;
Estas operações contractas podem ser utilizadas com quase todos os operadores aqui estudados, trazendo
em alguns casos (dependendo do compilador), uma redução no código objeto gerado (arquivo HEX menor)

Impresso em 03/08/2000 11:24:00 AM– Página 2


Centro Tecnológico de Mecatrônica / Centro Tecnológico Automotivo
Disciplina PROGRAMAÇÃO
Instrutor DANIEL CORTELETTI

Principais problemas enfrentados com estes operadores

Observando os trechos de programa abaixo, veja quais são os principais problemas enfrentados com os
operadores:

1) Uso inadequado do operador de comparação e atribuição.

if (x = 10)
{
...
}

O problema no trecho de programa acima está no fato de ter se utilizado o operador de atribuição
(=) no lugar do operador de comparação (==). Isso fará com que a variável x passe a valer 10, e
como este valor é diferente de zero, o conteúdo das chaves (bloco de instruções) será executado,
mesmo que a variável x inicialmente estivesse com valor diferente de 10.

2) Uso inadequado de tipos de dados

int A = 10, B = 30;


long X;

X = A * B;

No trecho de programa acima, uma operação é efetuada entre duas variáveis do tipo INT, e o
resultado da operação irá ultrapassar a capacidade de armazenamento para este tipo de dados (int
suporta valores inteiros de 0 a 255). Mesmo que a variável X seja do tipo long suporte este valor, o
dado é calculado somente com tipos INT, e o resultado será truncado (não será 300, e sim 44). Para
resolver este problema:
- Pode ser declarada uma das variáveis A ou B como um LONG. Esta solução é mais
simples, mas pode causar desperdício de memória.
- Pode ser utilizado um modelador (casting) em frente a uma das variáveis utilizadas no
processo. Ex: X = (long)A * B; Esta é a solução mais adequada, pois a variável A será utilizada na
operação como se fosse uma variável do tipo long (16 bits), forçando a multiplicação de 16 bits e
resultado um valor de 16 bits.

Impresso em 03/08/2000 11:24:00 AM– Página 3

Você também pode gostar