Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
LAPROIProf.Dr.RafaelGaribotti
PontifíciaUniversidadeCatólicadoRioGrandedoSulFaculdadedeInformática- FACIN
v Baseado nomaterialcedido pelos Profs.Dr.MarcoMangan eDr.MatheusTrevisan
OPERAÇÕESEEXPRESSÕESLÓGICASAULASOBRE:
OPERADORESRELACIONAIS
1
> maiorque< menorque>= maiorouigual<= menorouigual
&& E|| OU! NÃO
!= diferente== igual?: Operador ternário
Ø Exemplos:
ü 3>2 1>3ü 3<35<10ü 3>=33>=7ü 4<=16
ü 4!=5 ‘a’!=‘A’ü 5==5 ‘c’==‘C’ü (5>6)&&(4>5)ü numero >=0?numero++:numero--;
OPERADORESRELACIONAIS
2
Ø Sãousadosparafazercomparaçõesesuasexpressõesresultamemvaloreslógicos:verdadeirooufalso.
Ø EmCnãoexisteumtipobooleano,então:ü verdadeiroé1
Ø Assim,umadadaexpressãopodetervalor1(verdadeiro)ou0(falso).Ø Exemplos:
#include<stdio.h>int main(void){
int verdade, falso;verdade = (15 < 20);false = (15 == 20);printf("Verdadeiro= %d, falso= %d\n", verdade, falso);return 0;
}
ü falsoé0
OPERADORESLÓGICOSBINÁRIOS
3
~ NOTlógico (não) ^ XORlógico (ou exclusivo)& ANDlógico (e) << Desloca esquerda| ORlógico (ou) >> Desloca direita
Ø Exemplos:#include<stdio.h>
int main(void){int i, j, k;i = 1; j = 2;printf("\t i = %x (00000001)\n\tj = %x (00000010)", i, j);k = i & j; /* k = i AND j */printf("\n\t i & j => %x (00000000)", k);k = i ^ j; /* k = i XOR j */printf("\n\t i ˆ j => %x (00000011)", k);k = i << 2; /* k = i deslocando 2 bits à esquerda (4) */printf("\n\t i << 2 => %x (00000100)", k);return 0;
}
OPERADORESDEATRIBUIÇÃO
4
Ø Combinação comoutrosoperadores:
OPERADORESDEATRIBUIÇÃO
5
Ø Exemplo:#include<stdio.h>
int main(void){int total = 0;int cont = 10;printf("Total = %d\n", total);total += 1;printf("Total = %d\n", total);total ^= 2;printf("Total = %d\n", total);total <<= 2;printf("Total = %d\n", total);total *= cont;printf("Total = %d\n", total);return 0;
}
/*3 */
/*0 */
/*12 */
/*120 */
/*1 */
REPRESENTAÇÃODECIMAL
6
Decimal
0 8
1 9
2 10
3 11
4 12
5 13
6 14
7 15
REPRESENTAÇÃOBINÁRIA
7
Decimal Binário Decimal Binário
0 0000 8 1000
1 0001 9 1001
2 0010 10 1010
3 0011 11 1011
4 0100 12 1100
5 0101 13 1101
6 0110 14 1110
7 0111 15 1111
REPRESENTAÇÃOHEXADECIMAL
8
Decimal Hexa Decimal Hexa
0 0x0 8 0x8
1 0x1 9 0x9
2 0x2 10 0xA
3 0x3 11 0xB
4 0x4 12 0xC
5 0x5 13 0xD
6 0x6 14 0xE
7 0x7 15 0xF
RELAÇÃOENTREREPRESENTAÇÕES
9
Dec. Bin. Hexa Dec. Bin. Hexa
0 0000 0x0 8 1000 0x8
1 0001 0x1 9 1001 0x9
2 0010 0x2 10 1010 0xA
3 0011 0x3 11 1011 0xB
4 0100 0x4 12 1100 0xC
5 0101 0x5 13 1101 0xD
6 0110 0x6 14 1110 0xE
7 0111 0x7 15 1111 0xF
REPRESENTAÇÃO
10
Ø Formasderepresentaçãodeconteúdo"independentesdesemântica".ü DECIMAL:Formausualderepresentação.ü BINÁRIO:Permiteverosbitsdeumapalavra.• Desvantagens:• Muitoextenso(11110000101011100001010011101100).• Difícilmanipulação/entendimento.
ü HEXADECIMAL:Representaçãoembase16.ü Vantagens:• Facilitarepresentaçãoemelhortrade-offentredecimale
binário.
REPRESENTAÇÃO
11
Ø HEXADECIMALü Paraconverterobinário 11110000101011100001010011101100
paraseucorrespondentehexadecimalbastalerosbitsde4em4posições.
11110000101011100001010011101100F 0AE14EC
ü Valorbinário:11110000101011100001010011101100
ü Valorhexadecimal:F0AE14EC• Maiscurtoemaislegível(formatomaisutilizado)
REPRESENTAÇÃO
12
Ø Representação deliterais hexadecimais em C:
#include<stdio.h>
int main(void){unsigned int var;var = 254;printf("Var = %d\n", var);var = 0xFE;printf("Var = %d\n", var);return 0;
}
OPERADORES
13
Ø Aplicáveis aoperandos "integrais"ü int,char,shortint,longintü Preferencialmente unsigned(e.g.,unsignedint var).
Ø Dividem-seessencialmente em operadoreslógicos ededeslocamento.
Ø OperadoresLógicos:ü & andbitwise(bit-a-bit)ü | orbitwise(bit-a-bit)ü ~ complemento (inverte os bits)ü ^ xor (ou exclusivo)bitwise(bit-a-bit)
OPERADORESLÓGICOS
14
Ø Exemplos:AND (&)10110101
01100110
--------
00100100
OR (|)10110101
01100110
--------
11110111
XOR (^)10110101
01100110
--------
11010011
NOT (~)~10110101 = 01001010~01100110 = 10011001
OPERADORES
15
Ø OperadoresdeDeslocamento:
<< Deslocamento paraaesquerdaü Bitsmais à direita são preenchidos comzero
>> Deslocamento paraadireitaü Bitsmais à esquerda são preenchidos comzero
Ø Observação: Operador dedeslocamentoNÃO altera automaticamenteavariável!
OPERADORESDEDESLOCAMENTO
16
Ø Exemplos:
ü Deslocamento à direita
unsigned char x = 16;unsigned char y;y = x >> 3; // y recebe 2x = x >> 1; // x recebe 8
00010000com3dedeslocamento 0000001000010000com1dedeslocamento 00001000
ü Deslocamento à esquerda
unsigned char x = 1;unsigned char y;y = x << 3; // y recebe 8x = x << 4; // x recebe 16
00000001com3dedeslocamento 0000100000000001com4dedeslocamento 00010000
OPERADORESIZEOF
17
Ø Ooperadorsizeof éaplicadoaumtipoouaumavariáveldeumdadotipo.
Ø Exemplo:printf ("%d", sizeof(char));
sizeof(char) = 1 bytes sizeof(char*) = 4 bytes
sizeof(int) = 4 bytes sizeof(int*) = 4 bytes
sizeof(long long) = 8 bytes sizeof(double*) = 4 bytes
sizeof(float) = 4 bytes
sizeof(double) = 8 bytes
PALAVRASPARCIAIS
PALAVRASPARCIAIS
18
Ø Camposdebits(palavraparcial).
Ø Suponhaarepresentaçãodeumacor.
Ø UsodaintensidadedeseuscomponentesRGB.ü Cadacomponentepodeassumirvalorentre0e1023.ü Ouseja,1024valoresdistintos.
Ø 1024=210 (ouseja,10bitsparacadacomponente).
Ø Problema:nãocabeemumchar(8bits),umint (32bits)paracadacomponenteémuito.
PALAVRASPARCIAIS
19
Ø Solução: utilizarapenasumint.ü Eaindasobram2bits!
Ø Armazenamentodostrêscomponentesemumúnicounsigned intü Red (bits0a9)ü Green (bits10a19)ü Blue (bits20a29)
31 0
PALAVRASPARCIAIS
20
Ø Comofazerparaarmazenarumvalorx,digamos500noGreen?
Ø ComoimprimirovalordeRed ouBlue?
Ø Exemplo:
ü Assumaquex temumvalorinteiroentre0e1023,digamos,500(0x1F4)
ü Assumaqueovaloranteriordecor=125(0x7D)
cor = cor & ~(0x3FF << 10) | (x << 10);
/* & tem precedência sobre | e ~,tem precedência sobre ambos */
PALAVRASPARCIAIS
21
cor = 125; // cor = 0x7D// 0000 0000 0000 0000 0000 0000 0111 1101
cor = cor & ~(0x3FF << 10) | (x << 10);// ~(0x3FF << 10)// 1111 1111 1111 0000 0000 0011 1111 1111
// cor & ~(0x3FF << 10)// 0000 0000 0000 0000 0000 0000 0111 1101
PALAVRASPARCIAIS
22
// x (0x1F4)// 0000 0000 0000 0000 0000 0000 0111 1101
// x << 10 (0x7d000)// 0000 0000 0000 0111 1101 0000 0000 0000
// cor & ~(0x3FF << 10)// 0000 0000 0000 0000 0000 0000 0111 1101
// cor = cor & ~(0x3FF << 10) | (x << 10)// 0x7d07d (agora x está em Green, cor em Red)// 0000 0000 0000 0111 1101 0000 0111 1101
ATIVIDADE
LABORATÓRIO
23
Ø Asatividadesdolaboratóriodaauladehojeestão noMoodle.