Você está na página 1de 79

Curso de C

Operaes com Bits

18/5/2009 11:31

Copyright@Arnaldo V Moura, Daniel F Ferber

Curso C - IC/UNICAMP

Aritmtica em Bits
Soma:
Soma Soma de de dgitos dgitos binrios: binrios:
0 0 0 0 1 1 1 1 + + + + + + + + 0 0 1 1 0 0 1 1 = = = = = = = = 0 0 1 1 1 1 0 0e evai vaium um

18/5/2009 11:31

>

Curso C - IC/UNICAMP

Aritmtica em Bits
Soma:
Soma Soma de de dgitos dgitos binrios: binrios:
0 0 0 0 1 1 1 1 + + + + + + + + 0 0 1 1 0 0 1 1 = = = = = = = = 0 0 1 1 1 1 0 0e evai vaium um

1 + =
18/5/2009 11:31

1 0 1

1 1 0 0

1 1 1 1

1 (vai um) 0 1 0 1 1 0
3

>

Curso C - IC/UNICAMP

Aritmtica em Bits
Subtrao:
Subtrao Subtrao de de dgitos dgitos binrios: binrios:
0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 = = = = = = = = 0 0 1 1e e empresta empresta 1 1 1 1 0 0

18/5/2009 11:31

>

Curso C - IC/UNICAMP

Aritmtica em Bits
Subtrao:
Subtrao Subtrao de de dgitos dgitos binrios: binrios:
0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 = = = = = = = = 0 0 1 1e e empresta empresta 1 1 1 1 0 0

(empresta um) 1 18/5/2009 11:31

0 1

1 0 0

1 1 1

1 1 1

0 1 1
5

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo:
Objetivos: Objetivos: Verificar Verificarestado estadode deum umbit bit Atribuir Atribuirum umbit bit Extrair Extrairum umintervalo intervalo(nmero) (nmero)

18/5/2009 11:31

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo: Cabealho Cabealho de de MP3: MP3:
11 2 21 4 2 11 2 2 11 2
Original Copyright Canais (mono/stereo) Amostras de udio por segundo Bits por amostra de udio Verificao de erros Verifica Nmero da camada Nmero da verso Sincronia
18/5/2009 11:31 7

Objetivos: Objetivos: Verificar Verificarestado estadode deum umbit bit Atribuir Atribuirum umbit bit Extrair Extrairum umintervalo intervalo(nmero) (nmero)

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo: Cabealho Cabealho de de MP3: MP3:
11 2 21 4 2 11 2 2 11 2
Original Copyright Canais (mono/stereo) Amostras de udio por segundo Bits por amostra de udio Verificao de erros Verifica Nmero da camada Nmero da verso Sincronia
18/5/2009 11:31

Objetivos: Objetivos: Verificar Verificarestado estadode deum umbit bit Atribuir Atribuirum umbit bit Extrair Extrairum umintervalo intervalo(nmero) (nmero)

Representao: Representao: unsigned unsigned int int (32 (32 bits) bits)

>

Curso C - IC/UNICAMP

Operaes em Bits
NO binrio: Inverte Inverte todos todos os os bits: bits:
x
b7 b6 b5 b4 b3 b2 b1 b0
valor (unsigned int)

0 1 0 0 0 0 1 0
~

~x

1 0 1 1 1 1 0 1

resultado (unsigned int)

18/5/2009 11:31

>

Curso C - IC/UNICAMP

Operaes em Bits
NO binrio: Inverte Inverte todos todos os os bits: bits:
x
b7 b6 b5 b4 b3 b2 b1 b0
valor (unsigned int)

Operador: Operador: ~ ~ Tabela Tabela Verdade: Verdade: ~0 ~0 1 1 ~1 ~1 0 0

0 1 0 0 0 0 1 0
~

~x

1 0 1 1 1 1 0 1

resultado (unsigned int)

18/5/2009 11:31

10

>

Curso C - IC/UNICAMP

Operaes em Bits
NO binrio: Inverte Inverte todos todos os os bits: bits:
x
b7 b6 b5 b4 b3 b2 b1 b0
valor (unsigned int)

Operador: Operador: ~ ~ Tabela Tabela Verdade: Verdade: ~0 ~0 1 1 ~1 ~1 0 0

0 1 0 0 0 0 1 0
~

~x

1 0 1 1 1 1 0 1

resultado (unsigned int)

No No confundir confundir com com o ooperador operador ! !


18/5/2009 11:31 11

>

Curso C - IC/UNICAMP

Operaes em Bits
NO binrio:
unsigned int v, not_binario_v, not_logico_v; leBinario(&v); not_binario_v = ~v; not_logico_v = !v; Resultado: Resultado: Entrada: Entrada: 00010111 00010111 Sada: Sada: ~v ~v !v !v

escreveBinario(not_binario_v); escreveBinario(not_logico_v);
18/5/2009 11:31

Not01

12

>

Curso C - IC/UNICAMP

Operaes em Bits
NO binrio:
unsigned int v, not_binario_v, not_logico_v; leBinario(&v); not_binario_v = ~v; not_logico_v = !v; Resultado: Resultado: Entrada: Entrada: 00010111 00010111 Sada: Sada: ~v ~v 11101000 11101000 !v !v 00000000 00000000

escreveBinario(not_binario_v); escreveBinario(not_logico_v);
18/5/2009 11:31

Not01

13

>

Curso C - IC/UNICAMP

Operaes em Bits
OU binrio: Combina Combina pares pares de de bits: bits:
b7 b6 b5 b4 b3 b2 b1 b0

x y

0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 1

valor
(unsigned int)

valor
(unsigned int)

|
x|y 0 1 1 1 0 1 1 1

resultado
(unsigned int)

18/5/2009 11:31

14

>

Curso C - IC/UNICAMP

Operaes em Bits
OU binrio: Combina Combina pares pares de de bits: bits:
b7 b6 b5 b4 b3 b2 b1 b0

Operador: Operador: | | Tabela Tabela Verdade: Verdade: 0 0| |0 0 0 0 0 0| |1 1 1 1 1 1| |0 0 1 1 1 1| |1 1 1 1

x y

0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 1

valor
(unsigned int)

valor
(unsigned int)

|
x|y 0 1 1 1 0 1 1 1 resultado
(unsigned int)

18/5/2009 11:31

15

>

Curso C - IC/UNICAMP

Operaes em Bits
OU binrio: Combina Combina pares pares de de bits: bits:
b7 b6 b5 b4 b3 b2 b1 b0

Operador: Operador: | | Tabela Tabela Verdade: Verdade: 0 0| |0 0 0 0 0 0| |1 1 1 1 1 1| |0 0 1 1 1 1| |1 1 1 1

x y

0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 1

valor
(unsigned int)

valor
(unsigned int)

|
x|y 0 1 1 1 0 1 1 1 resultado
(unsigned int)

No No confundir confundir com com o ooperador operador || ||


18/5/2009 11:31 16

>

Curso C - IC/UNICAMP

Operaes em Bits
OU binrio:
unsigned int u, v; unsigned int or_binario, or_logico; Resultado: Resultado: leBinario(&u); Entrada: Entrada: leBinario(&v); u u= = 00011001 00011001 v v= = 00010101 00010101 or_binario = u | v; Sada: Sada: or_logico = u || v; u u| |v v u u || || v v escreveBinario(or_binario); escreveBinario(or_logico); Or01
18/5/2009 11:31 17

>

Curso C - IC/UNICAMP

Operaes em Bits
OU binrio:
unsigned int u, v; unsigned int or_binario, or_logico; Resultado: Resultado: leBinario(&u); Entrada: Entrada: leBinario(&v); u u= = 00011001 00011001 v v= = 00010101 00010101 or_binario = u | v; Sada: Sada: or_logico = u || v; u u| |v v 00011101 00011101 u u || || v v 00000001 00000001 escreveBinario(or_binario); escreveBinario(or_logico); Or01
18/5/2009 11:31 18

>

Curso C - IC/UNICAMP

Operaes em Bits
E binrio: Unifica Unifica pares pares de de bits: bits:
b7 b6 b 5 b4 b3 b2 b1 b 0

valor
(unsigned int)

valor
(unsigned int)

x y

0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 1

&
resultado
(unsigned int)

x&y 0 0 0 1 0 0 0 1

18/5/2009 11:31

19

>

Curso C - IC/UNICAMP

Operaes em Bits
E binrio: Unifica Unifica pares pares de de bits: bits:
b7 b6 b 5 b4 b3 b2 b1 b 0

valor
(unsigned int)

valor
(unsigned int)

Operador: Operador: & & Tabela Tabela Verdade: Verdade: 0 0& &0 0 0 0 0 0& &1 1 0 0 1 1& &0 0 0 0 1 1& &1 1 1 1

x y

0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 1

&
resultado
(unsigned int)

x&y 0 0 0 1 0 0 0 1

18/5/2009 11:31

20

>

Curso C - IC/UNICAMP

Operaes em Bits
E binrio: Unifica Unifica pares pares de de bits: bits:
b7 b6 b 5 b4 b3 b2 b1 b 0

valor
(unsigned int)

valor
(unsigned int)

Operador: Operador: & & Tabela Tabela Verdade: Verdade: 0 0& &0 0 0 0 0 0& &1 1 0 0 1 1& &0 0 0 0 1 1& &1 1 1 1

x y

0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 1

&
resultado
(unsigned int)

x&y 0 0 0 1 0 0 0 1

No No confundir confundir com com o ooperador operador && &&


18/5/2009 11:31 21

>

Curso C - IC/UNICAMP

Operaes em Bits
E binrio:
unsigned int u, v; unsigned int and_binario, and_logico; Resultado: Resultado: leBinario(&u); Entrada: Entrada: leBinario(&v); u u= = 00001100 00001100 v v= = 00001010 00001010 and_binario = u & v; Sada: Sada: and_logico = u && v; u u& &v v u u && && v v escreveBinario(and_binario); escreveBinario(and_logico); And01
18/5/2009 11:31 22

>

Curso C - IC/UNICAMP

Operaes em Bits
E binrio:
unsigned int u, v; unsigned int and_binario, and_logico; Resultado: Resultado: leBinario(&u); Entrada: Entrada: leBinario(&v); u u= = 00001100 00001100 v v= = 00001010 00001010 and_binario = u & v; Sada: Sada: and_logico = u && v; u u& &v v 000010000 000010000 u u && && v v 000000001 000000001 escreveBinario(and_binario); escreveBinario(and_logico); And01
18/5/2009 11:31 23

>

Curso C - IC/UNICAMP

Operaes em Bits
OU exclusivo: Exclui Exclui pares pares de de bits bits iguais: iguais:
b7 b6 b5 b4 b3 b2 b1 b0

x y

0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 1

valor
(unsigned int)

valor
(unsigned int)

^
x^y 0 1 1 0 0 1 1 0
resultado
(unsigned int)

18/5/2009 11:31

24

>

Curso C - IC/UNICAMP

Operaes em Bits
OU exclusivo: Exclui Exclui pares pares de de bits bits iguais: iguais:
b7 b6 b5 b4 b3 b2 b1 b0

Operador: Operador: ^ ^ Tabela Tabela Verdade: Verdade: 0 0^ ^0 0 0 0 0 0^ ^1 1 1 1 1 1^ ^0 0 1 1 1 1^ ^1 1 0 0

x y

0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 1

valor
(unsigned int)

valor
(unsigned int)

^
x^y 0 1 1 0 0 1 1 0
resultado
(unsigned int)

18/5/2009 11:31

25

>

Curso C - IC/UNICAMP

Operaes em Bits
OU EXCLUSIVO binrio:
unsigned int u, v; unsigned int xor_binario; Resultado: Resultado: leBinario(&u); Entrada: Entrada: leBinario(&v); u u= = 00001100 00001100 v v= = 00001010 00001010 xor_binario = u ^ v; Sada: Sada: u u^ ^v v escreveBinario(xor_binario);
Xor01

18/5/2009 11:31

26

>

Curso C - IC/UNICAMP

Operaes em Bits
OU EXCLUSIVO binrio:
unsigned int u, v; unsigned int xor_binario; Resultado: Resultado: leBinario(&u); Entrada: Entrada: leBinario(&v); u u= = 00001100 00001100 v v= = 00001010 00001010 xor_binario = u ^ v; Sada: Sada: u u^ ^v v 00000110 00000110 escreveBinario(xor_binario);
Xor01

18/5/2009 11:31

27

>

Curso C - IC/UNICAMP

Operaes em Bits
Deslocamento de bits:
valor
x
b7 b6 b5 b4 b3 b2 b1 b0

(unsigned int)

deslocamento

0 1 0 0 0 0 1 0

<<
x << 2 0 0 0 0 1 0 0 0

Insere 0s
resultado
(unsigned int)

18/5/2009 11:31

28

>

Curso C - IC/UNICAMP

Operaes em Bits
Deslocamento de bits:
valor
x
b7 b6 b5 b4 b3 b2 b1 b0 (unsigned int)

deslocamento

0 1 0 0 0 0 1 0

<<
x << 2 0 0 0 0 1 0 0 0

Insere 0s
resultado
(unsigned int)

valor
(unsigned int)

deslocamento
x
b7 b6 b5 b4 b3 b2 b1 b0

x >> y

>>
resultado
(unsigned int)

0 1 0 0 0 0 1 0

x >> 2 0 0 0 1 0 0 0 0

Perde bits

18/5/2009 11:31

29

>

Curso C - IC/UNICAMP

Operaes em Bits
Deslocamento de bits:
valor
x
b7 b6 b5 b4 b3 b2 b1 b0 (unsigned int)

deslocamento

0 1 0 0 0 0 1 0

<<
x << 2 0 0 0 0 1 0 0 0

Insere 0s
resultado
(unsigned int)

Operadores: Operadores: << << e e >> >>

valor
(unsigned int)

deslocamento
x
b7 b6 b5 b4 b3 b2 b1 b0

x >> y

>>
resultado
(unsigned int)

0 1 0 0 0 0 1 0

x >> 2 0 0 0 1 0 0 0 0

Perde bits

18/5/2009 11:31

30

>

Curso C - IC/UNICAMP

Operaes em Bits
Deslocamento binrio:
unsigned int v; unsigned int v_direita, v_esquerda; Resultado: Resultado: leBinario(&v); Entrada: Entrada: v v= = 10010010 10010010 v_esquerda = v << 2; Sada: Sada: v_direita = v >> 3; v v << << 2 2 v >> 3 v >> 3 escreveBinario(v_esquerda); escreveBinario(v_direita);
18/5/2009 11:31
Deslocamento01

31

>

Curso C - IC/UNICAMP

Operaes em Bits
Deslocamento binrio:
unsigned int v; unsigned int v_direita, v_esquerda; Resultado: Resultado: leBinario(&v); Entrada: Entrada: v v= = 10010010 10010010 v_esquerda = v << 2; Sada: Sada: v_direita = v >> 3; v v << << 2 2 01001000 01001000 v v >> >> 3 3 00010010 00010010 escreveBinario(v_esquerda); escreveBinario(v_direita);
18/5/2009 11:31
Deslocamento01

32

>

Curso C - IC/UNICAMP

Operaes em Bits
Mscara de bits: Selecionar Selecionar alguns alguns bits bits de de uma uma palavra palavra
palavra

Bits desejados: 1 e 4

b7 b6 b5 b4 b3 b2 b1 b0

18/5/2009 11:31

33

>

Curso C - IC/UNICAMP

Operaes em Bits
Mscara de bits: Selecionar Selecionar alguns alguns bits bits de de uma uma palavra palavra
palavra

Bits desejados: 1 e 4 Mscara:

b7 b6 b5 b4 b3 b2 b1 b0

0 0 0 1 0 0 1 0

18/5/2009 11:31

34

>

Curso C - IC/UNICAMP

Operaes em Bits
Mscara de bits: Selecionar Selecionar alguns alguns bits bits de de uma uma palavra palavra
palavra

Bits desejados: 1 e 4 Mscara: Seleo dos bits: E

b7 b6 b5 b4 b3 b2 b1 b0

0 0 0 1 0 0 1 0
b 07 b 06 b 05 b4 b 03 b 02 b1 b 00

18/5/2009 11:31

35

>

Curso C - IC/UNICAMP

Operaes em Bits
Representao de mscara de bits: Mscara: Mscara: nmero nmero inteiro inteiro e e binrio binrio
Mscara:

18/5/2009 11:31

36

>

Curso C - IC/UNICAMP

Operaes em Bits
Representao de mscara de bits: Mscara: Mscara: nmero nmero inteiro inteiro e e binrio binrio
Mscara: Lacunas: dgito 1 Demais: dgito 0 Representao numrica:

0 0 0 1 0 0 1 0 1 2

18/5/2009 11:31

37

>

Curso C - IC/UNICAMP

Operaes em Bits
Representao de mscara de bits: Mscara: Mscara: nmero nmero inteiro inteiro e e binrio binrio
Mscara: Lacunas: dgito 1 Demais: dgito 0 Representao numrica:

0 0 0 1 0 0 1 0 1 2

Em decimal: Em hexa:
18/5/2009 11:31

000100102

= 24 + 21 = 18 = 1216
38

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: Selecionar Selecionar primeiro primeiro bit: bit:
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

18/5/2009 11:31

39

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: Selecionar Selecionar primeiro primeiro bit: bit:
b15 b14 b13 b12 b11 b10 b9 b8 0 0 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 0 1 0 1

18/5/2009 11:31

40

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: Selecionar Selecionar primeiro primeiro bit: bit:
b15 b14 b13 b12 b11 b10 b9 b8 0 0 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 0 1 0 1

Representao numrica: Em decimal: 00000000 000000012 Em hexa Em C:


18/5/2009 11:31

= 20 = 1 = 116 0x0001
41

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: Intervalo Intervalo de de bits bits de de 4 4a a 12: 12:
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

18/5/2009 11:31

42

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: Intervalo Intervalo de de bits bits de de 4 4a a 12: 12:
b15 b14 b13 b12 b11 b10 b9 b8 0 0 0 1 1 1 1 1 1 F b7 b6 b5 b4 b3 b2 b1 b0 1 1 1 1 0 0 0 0 F 0

18/5/2009 11:31

43

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: Intervalo Intervalo de de bits bits de de 4 4a a 12: 12:
b15 b14 b13 b12 b11 b10 b9 b8 0 0 0 1 1 1 1 1 1 F b7 b6 b5 b4 b3 b2 b1 b0 1 1 1 1 0 0 0 0 F 0

Representao numrica: Em decimal: 00011111 111100002 Em hexa Em C:


18/5/2009 11:31

= 8176 = 1FF016 0x1FF0


44

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: Todos, Todos, exceto exceto bit bit 5: 5:
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

18/5/2009 11:31

45

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: Todos, Todos, exceto exceto bit bit 5: 5:
b15 b14 b13 b12 b11 b10 b9 b8 1 1 1 1 1 1 1 1 F F b7 b6 b5 b4 b3 b2 b1 b0 1 1 0 1 1 1 1 1 D F

18/5/2009 11:31

46

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: Todos, Todos, exceto exceto bit bit 5: 5:
b15 b14 b13 b12 b11 b10 b9 b8 1 1 1 1 1 1 1 1 F F b7 b6 b5 b4 b3 b2 b1 b0 1 1 0 1 1 1 1 1 D F

Representao numrica: Em decimal: 11111111 110111112 Em hexa Em C:


18/5/2009 11:31

= 65503 = FFDF16 0xFFDF


47

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: S S o o bit bit 5: 5:
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

18/5/2009 11:31

48

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: S S o o bit bit 5: 5:
b15 b14 b13 b12 b11 b10 b9 b8 0 0 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 0 0 1 0 0 0 0 0 2 0

18/5/2009 11:31

49

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo de mscara: S S o o bit bit 5: 5:
b15 b14 b13 b12 b11 b10 b9 b8 0 0 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 0 0 1 0 0 0 0 0 2 0

~ 0x0020 = 0xFFDF

1 1 1 1 1 1 1 1

1 1 0 1 1 1 1 1

18/5/2009 11:31

50

>

Curso C - IC/UNICAMP

Operaes em Bits
Verificar valor de um bit:
Procedimento: Procedimento:
Descobrir Descobrirmscara mscara Aplicar Aplicar E Ebinrio binrio Verificar Verificar com comIF IF

18/5/2009 11:31

51

>

Curso C - IC/UNICAMP

Operaes em Bits
Verificar valor de um bit:
Procedimento: Procedimento:
Descobrir Descobrirmscara mscara Aplicar Aplicar E Ebinrio binrio Verificar Verificar com comIF IF
E Ebinrio binrio 0 0& &0 0 0 0 1 1& &0 0 0 0 0 0& &1 1 0 0 1 1& &1 1 1 1
18/5/2009 11:31 52

>

Curso C - IC/UNICAMP

Operaes em Bits
Verificar valor de um bit:
Procedimento: Procedimento:
Descobrir Descobrirmscara mscara Aplicar Aplicar E Ebinrio binrio Verificar Verificar com comIF IF
E Ebinrio binrio 0 0& &0 0 0 0 1 1& &0 0 0 0 0 0& &1 1 0 0 1 1& &1 1 1 1
18/5/2009 11:31

b7 b6 b5 b4 b3 b2 b1 b0

& (E binrio)
0 0 1 0 0 0 0 0

=
0 0 b5 0 0 0 0 0

53

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo: Verificar Verificar valor valor do do bit bit 5: 5:
unsigned int v; leBinario(&v); if (v & 0x0020) { printf(Bit 5 1); } else { printf(Bit 5 0); }
18/5/2009 11:31

LerBit01

54

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo: Verificar Verificar valor valor do do bit bit 5: 5:
unsigned int v; leBinario(&v); Mscara para 00000000 0010000

if (v & 0x0020) { printf(Bit 5 1); } else { printf(Bit 5 0); }


18/5/2009 11:31

LerBit01

55

>

Curso C - IC/UNICAMP

Operaes em Bits
Alterar o valor de um bit:
Mudar Mudar para para 1: 1:
Descobrir Descobrirmscara mscara Aplicar Aplicar OU OUbinrio binrio

18/5/2009 11:31

56

>

Curso C - IC/UNICAMP

Operaes em Bits
Alterar o valor de um bit:
Mudar Mudar para para 1: 1:
Descobrir Descobrirmscara mscara Aplicar Aplicar OU OUbinrio binrio
OU OUbinrio binrio 0 0| |0 0 0 0 1 1| |0 0 1 1 0 0| |1 1 1 1 1 1| |1 1 1 1

18/5/2009 11:31

57

>

Curso C - IC/UNICAMP

Operaes em Bits
Alterar o valor de um bit:
Mudar Mudar para para 1: 1:
Descobrir Descobrirmscara mscara Aplicar Aplicar OU OUbinrio binrio
b7 b6 b5 b4 b3 b2 b1 b0 OU OUbinrio binrio 0 0| |0 0 0 0 1 1| |0 0 1 1 0 0| |1 1 1 1 1 1| |1 1 1 1

| (OU binrio)
0 0 1 0 0 0 0 0

=
b7 b6 1 b4 b3 b2 b1 b0

18/5/2009 11:31

58

>

Curso C - IC/UNICAMP

Operaes em Bits
Alterar o valor de um bit:
Mudar Mudar para para 0: 0:
Descobrir Descobrirmscara mscara Inverter Invertermscara mscara
(no (nobinrio) binrio)

Aplicar Aplicar E Ebinrio binrio

18/5/2009 11:31

59

>

Curso C - IC/UNICAMP

Operaes em Bits
Alterar o valor de um bit:
Mudar Mudar para para 0: 0:
Descobrir Descobrirmscara mscara Inverter Invertermscara mscara
(no (nobinrio) binrio)

Aplicar Aplicar E Ebinrio binrio


E Ebinrio binrio 0 0& &0 0 0 0 1 1& &0 0 0 0 0 0& &1 1 0 0 1 1& &1 1 1 1
18/5/2009 11:31 60

>

Curso C - IC/UNICAMP

Operaes em Bits
Alterar o valor de um bit:
Mudar Mudar para para 0: 0:
Descobrir Descobrirmscara mscara Inverter Invertermscara mscara
(no (nobinrio) binrio) b7 b6 b5 b4 b3 b2 b1 b0

Aplicar Aplicar E Ebinrio binrio


E Ebinrio binrio 0 0& &0 0 0 0 1 1& &0 0 0 0 0 0& &1 1 0 0 1 1& &1 1 1 1
18/5/2009 11:31

& (E binrio)
1 1 0 1 1 1 1 1

=
b7 b6 0 b4 b3 b2 b1 b0

61

>

Curso C - IC/UNICAMP

Operaes em Bits
Alterar o valor de um bit:
Trocar Trocar valor valor de de um um bit: bit:
Descobrir Descobrirmscara mscara Aplicar Aplicar OU OUexclusivo exclusivo

18/5/2009 11:31

62

>

Curso C - IC/UNICAMP

Operaes em Bits
Alterar o valor de um bit:
Trocar Trocar valor valor de de um um bit: bit:
Descobrir Descobrirmscara mscara Aplicar Aplicar OU OUexclusivo exclusivo
OU OUexclusivo exclusivo 0 0^ ^0 0 0 0 1 1^ ^0 0 1 1 0 0^ ^1 1 1 1 1 1^ ^1 1 0 0

18/5/2009 11:31

63

>

Curso C - IC/UNICAMP

Operaes em Bits
Alterar o valor de um bit:
Trocar Trocar valor valor de de um um bit: bit:
Descobrir Descobrirmscara mscara Aplicar Aplicar OU OUexclusivo exclusivo
b7 b6 b5 b4 b3 b2 b1 b0 OU OUexclusivo exclusivo 0 0^ ^0 0 0 0 1 1^ ^0 0 1 1 0 0^ ^1 1 1 1 1 1^ ^1 1 0 0

^ (OU exclusivo)
0 0 1 0 0 0 0 0

=
b7 b6 b5 b4 b3 b2 b1 b0

18/5/2009 11:31

64

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo: Mudar Mudar o o valor valor do do bit bit 5: 5:
unsigned int u, v, w, x; // Mudar para 1: v = u | 0x0020; // Mudar para 0: w = u & (~0x0020); // Inverter: w = u ^ 0x0020;

AtribuirBit01

18/5/2009 11:31

65

>

Curso C - IC/UNICAMP

Operaes em Bits
Ler um intervalo:
Procedimento: Procedimento:
Descobrir Descobrirmscara mscara do do intervalo intervalo Filtrar Filtrar bits bitscom com E Ebinrio binrio Deslocar Deslocar bits bitspara para direita direita

18/5/2009 11:31

66

>

Curso C - IC/UNICAMP

Operaes em Bits
Ler um intervalo:
Procedimento: Procedimento:
Descobrir Descobrirmscara mscara do do intervalo intervalo Filtrar Filtrar bits bitscom com E Ebinrio binrio Deslocar Deslocar bits bitspara para direita direita
E Ebinrio binrio 0 0& &0 0 0 0 1 1& &0 0 0 0 0 0& &1 1 0 0 1 1& &1 1 1 1
18/5/2009 11:31 67

>

Curso C - IC/UNICAMP

Operaes em Bits
Ler um intervalo:
Procedimento: Procedimento:
7 6 5 4 3 2 1 0 Descobrir mscara do intervalo Descobrir mscara do intervalo & (E binrio) Filtrar bits com E binrio Filtrar bits com E binrio 0 1 1 1 0 0 0 0 Deslocar bits para direita Deslocar bits para direita =

b b b b b b b b

E Ebinrio binrio 0 0& &0 0 0 0 1 1& &0 0 0 0 0 0& &1 1 0 0 1 1& &1 1 1 1
18/5/2009 11:31

0 b6 b5 b4 0 0 0 0

>> 4
0 0 0 0 0 b6 b5 b4

68

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo: Extrair Extrair nmero nmero no no intervalo intervalo 4 4 -- 6 6
unsigned int u, v, w;

LerFaixaBits01

18/5/2009 11:31

69

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo: Extrair Extrair nmero nmero no no intervalo intervalo 4 4 -- 6 6
b7 b6 b5 b4 b3 b2 b1 b0

unsigned int u, v, w; // Extrair intervalo v = u & 0x0070;

u m

x y z 0 1 1 1 0 0 0 0

v=u&m

0 x y z 0 0 0 0

18/5/2009 11:31

70

>

Curso C - IC/UNICAMP

Operaes em Bits
Exemplo: Extrair Extrair nmero nmero no no intervalo intervalo 4 4 -- 6 6
b7 b6 b5 b4 b3 b2 b1 b0

unsigned int u, v, w; // Extrair intervalo v = u & 0x0070; // Deslocar: w = v >> 4

u m

x y z 0 1 1 1 0 0 0 0

v=u&m

0 x y z 0 0 0 0

v >> 4

0 0 0 0 0 x y z
LerFaixaBits01

18/5/2009 11:31

71

>

Curso C - IC/UNICAMP

Operaes em Bits
Atribuir um intervalo de bits:
Passo Passo 1: 1:
Apagar Apagar bits bits na na palavra palavra Descobrir Descobrirmscara mscara invertida invertida do do intervalo intervalo Aplicar Aplicar E Ebinrio binrio para para apagar apagar

18/5/2009 11:31

72

>

Curso C - IC/UNICAMP

Operaes em Bits
Atribuir um intervalo de bits:
Passo Passo 1: 1:
Apagar Apagar bits bits na na palavra palavra Descobrir Descobrirmscara mscara invertida invertida do do intervalo intervalo Aplicar Aplicar E Ebinrio binrio para para apagar apagar
E Ebinrio binrio 0 0& &0 0 0 0 1 1& &0 0 0 0 0 0& &1 1 0 0 1 1& &1 1 1 1
18/5/2009 11:31 73

>

Curso C - IC/UNICAMP

Operaes em Bits
Atribuir um intervalo de bits:
Passo Passo 1: 1:
Apagar Apagar bits bits na na palavra palavra Descobrir Descobrirmscara mscara invertida invertida do do intervalo intervalo Aplicar Aplicar E Ebinrio binrio para para apagar apagar b7 x6 x5 x4 b3 b2 b1 b0
E Ebinrio binrio 0 0& &0 0 0 0 1 1& &0 0 0 0 0 0& &1 1 0 0 1 1& &1 1 1 1
18/5/2009 11:31

& (E binrio)
1 0 0 0 1 1 1 1

=
b7 0 0 0 b3 b2 b1 b0
74

>

Curso C - IC/UNICAMP

Operaes em Bits
Atribuir um intervalo de bits:
Passo Passo 2: 2:
Deslocar Deslocar para para a a esquerda esquerda Aplicar Aplicar OU OUbinrio binrio para para copiar copiar bits bits

18/5/2009 11:31

75

>

Curso C - IC/UNICAMP

Operaes em Bits
Atribuir um intervalo de bits:
Passo Passo 2: 2:
Deslocar Deslocar para para a a esquerda esquerda Aplicar Aplicar OU OUbinrio binrio para para copiar copiar bits bits

0 0 0 0 0 b6 b5 b4

<< 4
0 b6 b5 b4 0 0 0 0

18/5/2009 11:31

76

>

Curso C - IC/UNICAMP

Operaes em Bits
Atribuir um intervalo de bits:
Passo Passo 2: 2:
Deslocar Deslocar para para a a esquerda esquerda Aplicar Aplicar OU OUbinrio binrio para para copiar copiar bits bits
OU OUbinrio binrio 0 0| |0 0 0 0 1 1| |0 0 1 1 0 0| |1 1 1 1 1 1| |1 1 1 1

0 0 0 0 0 b6 b5 b4

b7 0 0 0 b3 b2 b1 b0

| (OU binrio)
0 b6 b5 b4 0 0 0 0

<< 4
0 b6 b5 b4 0 0 0 0

=
b7 b6 b5 b4 b3 b2 b1 b0
AtribuirFaixaBits01 77

18/5/2009 11:31

>

Representao Binria

TrocaBit01

18/5/2009 11:31

78

Representao Binria

Fim

18/5/2009 11:31

79

Você também pode gostar