Microcontroladores
Prof. Eng. Derig Almeida Vidal
Mestre em Computação Aplicada, Engenheiro de Produção e Tecnólogo em Automática
Aula 06
Operadores
Prof. Derig Almeida Vidal, MsC
Sumário
• Operadores • Atribuição • Aritméticos • Relacionais • Lógicos Booleanos • Lógicos bit a bit • Outros operadoresExpressões numéricas e de string
(caracteres)
• Representação de dados:
– Números Decimais: Não podem começar por ‘ 0 ’ (zero)
• Ex: 123; 2; 14534; 3.14; ...
– Números Octais: Devem começar por ‘ 0 ’ (zero)
• Exemplos: 045; 09;...
– Números Binários: Devem iniciar por ‘ 0b ‘
• Ex: 0b10101010
– Números Hexadecimais: Devem iniciar por ‘ 0x ‘
• Ex: 0x32; 0xA9; ...
– String de 1 caractere: Entre Apóstrofos ‘ ‘
• Ex: ‘z’; ‘A’; ....
– String de vários caracteres: Entre aspas “ “
• Ex: “teste de escrita”
Operadores
• A linguagem C possui uma grande quantidade de operadores.
• Pode-se classificar os operadores da linguagem C em sete categorias principais:
– Atribuição; – Aritméticos; – Relacionais; – Lógicos;
– Lógicos bit a bit; – Dentre outros;
Prof. Derig Almeida Vidal, MsC
Operadores
Prof. Derig Almeida Vidal, MsC
Atribuição
• O operador de atribuição “=” é utilizado para atribuir um determinado valor a uma variável. • Ex:
x = 10; y = x;
Aritméticos
• 5.0 / 2.0 = 2,5 em uma divisão real; • 5 / 2 = 2 em uma divisão inteira; • 5 % 2 = 1 é o resto da divisão;
Operador Ação
+ Adição
- Subtração ou menos unário * Multiplicação
/ Divisão
% Resto de divisão inteira ++ Incremento
Aritméticos - Incremento e decremento
int a,b=10;
a = b++; // o valor de a é 10 e de b é 11; • Ou seja, atribui o valor de b para a e incrementa b;
int a,b=10;
a = b--; // o valor de a é 10 e de b é 9;
Prof. Derig Almeida Vidal, MsC
Aritméticos - Incremento e decremento
int a,b=10;
a = ++b; // o valor de a é 11 e de b é 11; • Ou seja, incrementa b e atribui o valor de b para a;
int a,b=10;
a = --b; // o valor de a é 9 e de também é 9; • Ou seja, decrementa b e atribui o valor de b para a; • OBS: não é possível utilizar operadores de incremento ou
decremento com variáveis ou tipos de dados complexos, tais como os tipos ponto flutuante.
Prof. Derig Almeida Vidal, MsC
Relacionais
Operador Ação > Maior que >= Maior ou igual a < Menor que <= Menor ou igual a == Igual a != Diferente deLógicos Booleanos
• São de suma importância na construção de testes condicionais;
• Através destes podemos relacionar diversas condições diferentes em um mesmo teste lógico;
Operador Ação
&& AND (E)
|| OR (OU) ! NOT (NÃO)
Lógicos Booleanos
int x,y; x = 10; if (x>5 && x<20) y = x;• Neste caso y só receberá x se x for maior do que 5
e menor do que 20;
int x,y; x = 0; if (!x) y = x;
Prof. Derig Almeida Vidal, MsC
Lógicos bit a bit
• São utilizados para realizar operações lógicas entre elementos ou variáveis;
• Podem resultar em um valor da mesma magnitude dos elementos operados.
Operador Ação
& AND (E)
| OR (OU)
^ XOR (OU exclusivo) ~ NOT (complemento de um) >> Deslocamento a direita << Deslocamento a esquerda
Prof. Derig Almeida Vidal, MsC
Operador & (AND)
int x,y; x = 100; y = x & 15; 100 decimal = 01100100 015 decimal = 00001111 Resultado = 00000100 Ou seja 4 em decimal
Operador & (AND)
• Ele é uma excelente forma de desligar um ou mais bits de uma determinada variável, já que o bit 0 em um dos operandos fará com que o respectivo bit de resultado seja também igual a zero.
#byte portb = 6
portb = portb & 0b11100000;
Operador | (OR)
int x,y; x = 0x20; y = x | 0x04; 0x20 = 00100000 0x04 = 00000100 Resultado = 00100100 Ou seja o resultado 0x24Prof. Derig Almeida Vidal, MsC
Operador | (OR)
• Ele é uma excelente forma de ligar um ou mais bits de uma determinada variável, já que o bit 1 em um dos operandos fará com que o respectivo bit do resultado seja também igual a um.
#byte portb = 6
portb = portb | 0b11100000;
Prof. Derig Almeida Vidal, MsC
Operador ^ (XOR)
int x,y; x = 100; y = x ^ 99; 100 decimal = 01100100 099 decimal = 01100011 Resultado = 00000111 Ou seja 7 em decimal.Sempre que os bits forem iguais nos dois operandos o resultado será 0, se diferentes 1;
Operador ~ (NOT)
int x,y; long a,b; x = 1; a = 1; y = ~ x; b = ~ a; 1 decimal (x) = 00000001 Resultado (y) = 11111110 1 decimal (a) = 0000000000000001 Resultado (b) = 1111111111111110Operador de deslocamento <<
int x,y; x = 10; y = x << 2; 10 decimal (x) = 00001010 << 00010100 << Resultado (y) = 00101000Prof. Derig Almeida Vidal, MsC
Operador de deslocamento >>
int x,y; x = 10; y = x >> 1; 10 decimal (x) = 00001010 << Resultado (y) = 00000101OBS: os comandos de deslocamento não são válidos para dados complexos (float).
Prof. Derig Almeida Vidal, MsC
Outros operadores
Operador Ação
? Operador ternário condicional , Separador de expressões . Separador de estruturas -> Ponteiro de elemento de estrutura (tipo) Operador de modelagem de dado sizeof Retorna o tamanho da variável
Operador ?
• É utilizado para substituir uma expressão condicional baseada no comando if e tem esse nome devido ao fato de ser composto sempre por três expressões. Sua forma geral é:
Variável = Expressão1? Expressão2: Expressão3;
• O que significa: avalie expressão 1 e se ela for verdadeira, atribua a Variável a Expressão2; caso contrário atribua a Expressão3;
Operador ?
int x,y;
x = 5;
y = x==2 ? 10 : x+3;
Desta forma, x terá seu valor igual a 8.
Caso x fosse igual a 2 o seu valor seria
10.
Prof. Derig Almeida Vidal, MsC
Operador vírgula
• É utilizado para enfileirar duas ou mais expressões. • A forma geral de utilização deste operador é:
Variável = (Expressão1, Expressão2 [,Expressão3]); • Ex:
y = (x=0, x+5);
• A variável x assume o valor zero e em seguida, y irá assumir o valor de x mais 5, ou seja, ao final da avaliação da expressão, y = 5;
Prof. Derig Almeida Vidal, MsC
Operador vírgula
• Ex2:
z = (x = 0, y = 5, x - 2);
• O compilador gera o código para cada expressão individualmente, terminando por gerar o último código: z = x – 2;
Operador sizeof
• É utilizado para retornar a quantidade de memória utilizada por uma determinada variável ou um determinado tipo de dado.
• Forma geral:
sizeof variável
sizeof (tipo de dado)
• É utilizado para permitir ao programador controlar a ocupação de memória pelo programa, auxiliando assim na portabilidade do programa.
Associação de operadores
Operador Equivalência Descrição
a *= b a = a * b Multiplicação a /= b a = a / b Divisão a %= b a = a % b Resto a += b a = a + b Adição a -= b a = a - b Subtração a <<= b a = a << b Desloc esquerda a >>= b a = a >> b Desloc direita a &= b a = a & b E a ^= b a = a ^ b OU exclusivo a |= b a = a | b OU
Prof. Derig Almeida Vidal, MsC
Procedência
dos
operadores
Ordem Operador Maior () [] ->. ++ -- ! & * ~ (tipo) sizeof * / % + -<< >> < <= >= > == != & ^ | && || ? = += -= *= /= Menor ,
Prof. Derig Almeida Vidal, MsC
Exercícios
1. Qual é a diferença entre o operador = e ==? 2. Qual é o resultado da expressão (10 && 5)? 3. Qual é o resultado da expressão (10 | 5)? 4. Como é avaliada a expressão (x = (10+5) < 20)? 5. Qual é o valor de “x” ao término do programa
apresentado em seguida? int x,y; y = 256; y += 1; x = y >> 1;
Exercícios
6. Qual é o resultado da expressão (10 % 3 + 1)? 7. Qual é o valor de “y” ao término do programa
seguinte? long int x; int y,z; z = 100; y = 10; x = z * y + z && 1; y = (int) x;
Exercícios
8. Qual é o valor armazenado nas variáveis “y” e “z” no programa seguinte? long int x; int y,z; x = 0x1234; y = x; z = x>>8;
Prof. Derig Almeida Vidal, MsC
Bibliografia
• PEREIRA, Fábio. Microcontroladores PIC: