IFCE – Campus Cedro
Mecatrônica Microcontroladores
Prof. Eng. Derig Almeida Vidal
Mestrando em Computação Aplicada, Engenheiro de Produção e Tecnólogo em Automática
Aula 10
Operadores
Prof. Derig Almeida Vidal IFCE - Cedro
Sumário
• Operadores • Atribuição • Aritméticos • Relacionais • Lógicos Booleanos • Lógicos bit a bit • Outros operadoresProf. Derig Almeida Vidal IFCE - Cedro
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 IFCE - Cedro
Atribuição
• O operador de atribuição “=” é utilizado para atribuir um determinado valor a uma variável. • Ex:
x = 10; y = x;
Prof. Derig Almeida Vidal IFCE - Cedro
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
-- Decremento
Prof. Derig Almeida Vidal IFCE - Cedro
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;
• Ou seja, atribui o valor de b para a e decrementa b;
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.
Relacionais
Operador Ação > Maior que >= Maior ou igual a < Menor que <= Menor ou igual a == Igual a != Diferente deProf. Derig Almeida Vidal IFCE - Cedro
Ló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)
Prof. Derig Almeida Vidal IFCE - Cedro
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;
• Neste caso y receberá x, pois !x é verdadeiro (1);
Prof. Derig Almeida Vidal IFCE - Cedro
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 IFCE - Cedro
Operador & (AND)
int x,y; x = 100; y = x & 15; 100 decimal = 01100100 015 decimal = 00001111 Resultado = 00000100 Ou seja 4 em decimal
Prof. Derig Almeida Vidal IFCE - Cedro
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;
Prof. Derig Almeida Vidal IFCE - Cedro
Operador | (OR)
int x,y; x = 0x20; y = x | 0x04; 0x20 = 00100000 0x04 = 00000100 Resultado = 00100100 Ou seja o resultado 0x24Operador | (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;
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;
Prof. Derig Almeida Vidal IFCE - Cedro
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) = 1111111111111110Prof. Derig Almeida Vidal IFCE - Cedro
Operador de deslocamento <<
int x,y; x = 10; y = x << 2; 10 decimal (x) = 00001010 << 00010100 << Resultado (y) = 00101000Prof. Derig Almeida Vidal IFCE - Cedro
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 IFCE - Cedro
Memória
• Também são chamados de operadores de
ponteiros, são elementos de grande importância na linguagem C. São considerados os pilares dela, pois permitem o acesso direto a qualquer endereço de memória do sistema.
Operador Ação
& Endereço do operando
Prof. Derig Almeida Vidal IFCE - Cedro
Operador &
• É um operador utilizado para retornar o endereço de memória do seu operando. Por exemplo:
endereco_a = &a;
• A variável endereco_a conterá o endereço em que está armazenada a variável a;
Prof. Derig Almeida Vidal IFCE - Cedro
Operador *
• É um operador unário para retornar o conteúdo da posição de memória endereçada pelo operando que o segue. Por exemplo:
a = *endereco_a;
• O valor armazenado no local apontado pela variável endereco_a é atribuído à variável a;
Exemplo com ponteiros
#include <16f628a.h> #use delay(clock=4000000)
#fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP #use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1)
int *endereco,x,y; void main() {
x = 12;
endereco = &x; y = *endereco;
printf(“valor x= %d – endereco de x = %lx – valor y= %d”,x,endereco,y);
}
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
Prof. Derig Almeida Vidal IFCE - Cedro
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;
Prof. Derig Almeida Vidal IFCE - Cedro
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 IFCE - Cedro
Exemplo com o operador ?
#include <16f628a.h> #use delay(clock=4000000) #fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP #byte porta = 5 #byte portb = 6 int liga_led(void){
porta = porta | 1; // ativa o pino 0 da porta a }
int desliga_led(void) {
porta = porta & 254; // desliga o pino 0 da porta a }
main() {
while (true) (portb & 1) ? liga_led() : desliga_led(); }
Prof. Derig Almeida Vidal IFCE - Cedro
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 IFCE - Cedro
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;
Prof. Derig Almeida Vidal IFCE - Cedro
Operador modelagem de tipo
• Operador unário destinado especificamente a forçar a conversão do operando especificado em um tipo de dado determinado. O que é chamado de
typecasting.
• Forma geral:
(tipo) variável
• O conteúdo da variável não é alterado pelo operador, ao invés disso, aloca-se uma região de RAM para o armazenamento temporário do valor modificado.
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 IFCE - Cedro
Procedência
dos
operadores
Ordem Operador Maior () [] ->. ++ -- ! & * ~ (tipo) sizeof * / % + -<< >> < <= >= > == != & ^ | && || ? = += -= *= /= Menor ,
Prof. Derig Almeida Vidal IFCE - Cedro
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;
Prof. Derig Almeida Vidal IFCE - Cedro
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;
Prof. Derig Almeida Vidal IFCE - Cedro
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 IFCE - Cedro
Bibliografia
• PEREIRA, Fábio. Microcontroladores PIC: