Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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)
0 1 0 0 0 0 1 0
~
~x
1 0 1 1 1 1 0 1
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)
0 1 0 0 0 0 1 0
~
~x
1 0 1 1 1 1 0 1
>
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
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
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)
>
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
>
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
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)
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
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
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
= 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
>
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
>
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
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)
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)
>
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
& (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
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
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