LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

27
LAPRO I Prof. Dr. Rafael Garibotti Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Informática - FACIN v Baseado no material cedido pelos Profs. Dr. Marco Mangan e Dr. Matheus Trevisan

Transcript of LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

Page 1: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

LAPROIProf.Dr.RafaelGaribotti

PontifíciaUniversidadeCatólicadoRioGrandedoSulFaculdadedeInformática- FACIN

v Baseado nomaterialcedido pelos Profs.Dr.MarcoMangan eDr.MatheusTrevisan

Page 2: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

OPERAÇÕESEEXPRESSÕESLÓGICASAULASOBRE:

Page 3: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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--;

Page 4: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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

Page 5: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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;

}

Page 6: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

OPERADORESDEATRIBUIÇÃO

4

Ø Combinação comoutrosoperadores:

Page 7: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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 */

Page 8: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

REPRESENTAÇÃODECIMAL

6

Decimal

0 8

1 9

2 10

3 11

4 12

5 13

6 14

7 15

Page 9: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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

Page 10: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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

Page 11: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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

Page 12: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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.

Page 13: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

REPRESENTAÇÃO

11

Ø HEXADECIMALü Paraconverterobinário 11110000101011100001010011101100

paraseucorrespondentehexadecimalbastalerosbitsde4em4posições.

11110000101011100001010011101100F 0AE14EC

ü Valorbinário:11110000101011100001010011101100

ü Valorhexadecimal:F0AE14EC• Maiscurtoemaislegível(formatomaisutilizado)

Page 14: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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;

}

Page 15: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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)

Page 16: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

OPERADORESLÓGICOS

14

Ø Exemplos:AND (&)10110101

01100110

--------

00100100

OR (|)10110101

01100110

--------

11110111

XOR (^)10110101

01100110

--------

11010011

NOT (~)~10110101 = 01001010~01100110 = 10011001

Page 17: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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!

Page 18: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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

Page 19: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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

Page 20: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

PALAVRASPARCIAIS

Page 21: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

PALAVRASPARCIAIS

18

Ø Camposdebits(palavraparcial).

Ø Suponhaarepresentaçãodeumacor.

Ø UsodaintensidadedeseuscomponentesRGB.ü Cadacomponentepodeassumirvalorentre0e1023.ü Ouseja,1024valoresdistintos.

Ø 1024=210 (ouseja,10bitsparacadacomponente).

Ø Problema:nãocabeemumchar(8bits),umint (32bits)paracadacomponenteémuito.

Page 22: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

PALAVRASPARCIAIS

19

Ø Solução: utilizarapenasumint.ü Eaindasobram2bits!

Ø Armazenamentodostrêscomponentesemumúnicounsigned intü Red (bits0a9)ü Green (bits10a19)ü Blue (bits20a29)

31 0

Page 23: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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 */

Page 24: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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

Page 25: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

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

Page 26: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

ATIVIDADE

Page 27: LAPRO I - inf.pucrs.broliveira/laproIEC/Expressoes_Logicas.pdf · y = x

LABORATÓRIO

23

Ø Asatividadesdolaboratóriodaauladehojeestão noMoodle.