curso de c - olimpiada.ic.unicamp.br · curso c -ic/unicamp soma de dígitos binários: 0 + 0 = 0 0...
Post on 24-Jan-2019
220 Views
Preview:
TRANSCRIPT
-
16/05/2011 09:54Copyright@Arnaldo V Moura, Daniel F Ferber
1
Curso de C
Operaes com Bits
-
16/05/2011 09:54 2
Curso C - IC/UNICAMP
Soma de dgitos binrios:0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 e vai um
Soma de dgitos binrios:0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 e vai um
Aritmtica em Bits
Soma:
>
-
16/05/2011 09:54 3
Curso C - IC/UNICAMP
Soma de dgitos binrios:0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 e vai um
Soma de dgitos binrios:0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 e vai um
Aritmtica em Bits
Soma:
0 1 1 0 1
1 0 1 1 1
0 0 1 0 01
1 1 1 11
+
=
0 1 1 0 1
1 0 1 1 1
0 0 1 0 01
1 1 1 11 (vai um)
+
=
>
-
16/05/2011 09:54 4
Curso C - IC/UNICAMP
Subtrao de dgitos binrios: 0 - 0 = 0
0 - 1 = 1 e empresta 1 1 - 0 = 1
1 - 1 = 0
Subtrao de dgitos binrios: 0 - 0 = 0
0 - 1 = 1 e empresta 1 1 - 0 = 1
1 - 1 = 0
Aritmtica em Bits
Subtrao:
>
-
16/05/2011 09:54 5
Curso C - IC/UNICAMP
Subtrao de dgitos binrios: 0 - 0 = 0
0 - 1 = 1 e empresta 1 1 - 0 = 1
1 - 1 = 0
Subtrao de dgitos binrios: 0 - 0 = 0
0 - 1 = 1 e empresta 1 1 - 0 = 1
1 - 1 = 0
Aritmtica em Bits
Subtrao:
0 1 1 1 0
1 0 1 1 1
1 0 1 1 10
(empresta um)
11
1=
-
0 1 1 1 0
1 0 1 1 1
1 0 1 1 10
(empresta um)
11
1=
-
>
-
16/05/2011 09:54 6
Curso C - IC/UNICAMP
Operaes em Bits
Exemplo:Objetivos:
Verificar estado de um bit
Atribuir um bit
Extrair um intervalo (nmero)
Objetivos:
Verificar estado de um bit
Atribuir um bit
Extrair um intervalo (nmero)
>
-
16/05/2011 09:54 7
Curso C - IC/UNICAMP
Cabealho de MP3:Cabealho de MP3:
Operaes em Bits
Exemplo:
>
Objetivos:
Verificar estado de um bit
Atribuir um bit
Extrair um intervalo (nmero)
Objetivos:
Verificar estado de um bit
Atribuir um bit
Extrair um intervalo (nmero)
11 2 2 1 4 2 11
Sincronia
Nmero da verso
Nmero da camada
Verificao de erros
Bits por amostra de udio
Amostras de udio por segundo
2 2 11 2
Canais (mono/stereo)
Copyright
Original
11 2 2 1 4 2 11
Sincronia
Nmero da verso
Nmero da camada
Verifica
Bits por amostra de udio
Amostras de udio por segundo
2 2 11 2
Canais (mono/stereo)
Copyright
Original
-
16/05/2011 09:54 8
Curso C - IC/UNICAMP
Cabealho de MP3:Cabealho de MP3:
Operaes em Bits
Exemplo:
Representao: unsigned int (32 bits)Representao: unsigned int (32 bits)>
Objetivos:
Verificar estado de um bit
Atribuir um bit
Extrair um intervalo (nmero)
Objetivos:
Verificar estado de um bit
Atribuir um bit
Extrair um intervalo (nmero)
11 2 2 1 4 2 11
Sincronia
Nmero da verso
Nmero da camada
Verificao de erros
Bits por amostra de udio
Amostras de udio por segundo
2 2 11 2
Canais (mono/stereo)
Copyright
Original
11 2 2 1 4 2 11
Sincronia
Nmero da verso
Nmero da camada
Verifica
Bits por amostra de udio
Amostras de udio por segundo
2 2 11 2
Canais (mono/stereo)
Copyright
Original
-
16/05/2011 09:54 9
Curso C - IC/UNICAMP
>
Inverte todos os bits:Inverte todos os bits:
Operaes em Bits
NO binrio:
1 0 1 1 1 1 0 1
x
~ x
0 1 0 0 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
1 0 1 1 1 1 0 11 0 1 1 1 1 0 1
x
~ x
0 1 0 0 0 0 1 00 1 0 0 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
~
valor
(unsigned int)
resultado
(unsigned int)
~
valor
(unsigned int)
resultado
(unsigned int)
-
16/05/2011 09:54 10
Curso C - IC/UNICAMP
>
Inverte todos os bits:Inverte todos os bits:
Operaes em Bits
NO binrio:
1 0 1 1 1 1 0 1
x
~ x
0 1 0 0 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
1 0 1 1 1 1 0 11 0 1 1 1 1 0 1
x
~ x
0 1 0 0 0 0 1 00 1 0 0 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
~
valor
(unsigned int)
resultado
(unsigned int)
~
valor
(unsigned int)
resultado
(unsigned int)
Tabela Verdade:~0 1~1 0
Tabela Verdade:~0 1~1 0
Operador: ~Operador: ~
-
16/05/2011 09:54 11
Curso C - IC/UNICAMP
>
Inverte todos os bits:Inverte todos os bits:
Operaes em Bits
NO binrio:
No confundir com o operador !No confundir com o operador !
1 0 1 1 1 1 0 1
x
~ x
0 1 0 0 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
1 0 1 1 1 1 0 11 0 1 1 1 1 0 1
x
~ x
0 1 0 0 0 0 1 00 1 0 0 0 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
~
valor
(unsigned int)
resultado
(unsigned int)
~
valor
(unsigned int)
resultado
(unsigned int)
Tabela Verdade:~0 1~1 0
Tabela Verdade:~0 1~1 0
Operador: ~Operador: ~
-
16/05/2011 09:54 12
Curso C - IC/UNICAMP
Operaes em Bits
unsigned int v, not_binario_v, not_logico_v;
leBinario(&v);
not_binario_v = ~v;
not_logico_v = !v;
escreveBinario(not_binario_v);
escreveBinario(not_logico_v);
NO binrio:
Resultado:
Entrada:00010111
Sada:
~v !v
Resultado:
Entrada:00010111
Sada:
~v !v
>
Not01
-
16/05/2011 09:54 13
Curso C - IC/UNICAMP
Operaes em Bits
unsigned int v, not_binario_v, not_logico_v;
leBinario(&v);
not_binario_v = ~v;
not_logico_v = !v;
escreveBinario(not_binario_v);
escreveBinario(not_logico_v);
NO binrio:
Resultado:
Entrada:00010111
Sada:
~v 11101000!v 00000000
Resultado:
Entrada:00010111
Sada:
~v 11101000!v 00000000
>
Not01
-
16/05/2011 09:54 14
Curso C - IC/UNICAMP
Combina pares de bits:Combina pares de bits:
Operaes em Bits
OU binrio:
|
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
|
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
0 1 1 1 0 1 1 1
x
x | y
0 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 1y
0 1 1 1 0 1 1 10 1 1 1 0 1 1 1
x
x | y
0 0 1 1 0 1 0 10 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 10 1 0 1 0 0 1 1y
>
-
16/05/2011 09:54 15
Curso C - IC/UNICAMP
Combina pares de bits:Combina pares de bits:
Operaes em Bits
OU binrio:
Tabela Verdade:0 | 0 00 | 1 11 | 0 11 | 1 1
Tabela Verdade:0 | 0 00 | 1 11 | 0 11 | 1 1
Operador: |Operador: |
|
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
|
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
0 1 1 1 0 1 1 1
x
x | y
0 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 1y
0 1 1 1 0 1 1 10 1 1 1 0 1 1 1
x
x | y
0 0 1 1 0 1 0 10 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 10 1 0 1 0 0 1 1y
>
-
16/05/2011 09:54 16
Curso C - IC/UNICAMP
Combina pares de bits:Combina pares de bits:
Operaes em Bits
OU binrio:
No confundir com o operador ||No confundir com o operador ||
Tabela Verdade:0 | 0 00 | 1 11 | 0 11 | 1 1
Tabela Verdade:0 | 0 00 | 1 11 | 0 11 | 1 1
Operador: |Operador: |
|
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
|
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
0 1 1 1 0 1 1 1
x
x | y
0 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 1y
0 1 1 1 0 1 1 10 1 1 1 0 1 1 1
x
x | y
0 0 1 1 0 1 0 10 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 10 1 0 1 0 0 1 1y
>
-
16/05/2011 09:54 17
Curso C - IC/UNICAMP
Operaes em Bits
unsigned int u, v;unsigned int or_binario, or_logico;
leBinario(&u);leBinario(&v);
or_binario = u | v;or_logico = u || v;
escreveBinario(or_binario);escreveBinario(or_logico);
OU binrio:
Resultado:
Entrada:u = 00011001v = 00010101
Sada:u | v u || v
Resultado:
Entrada:u = 00011001v = 00010101
Sada:u | v u || v
>
Or01
-
16/05/2011 09:54 18
Curso C - IC/UNICAMP
Operaes em Bits
unsigned int u, v;unsigned int or_binario, or_logico;
leBinario(&u);leBinario(&v);
or_binario = u | v;or_logico = u || v;
escreveBinario(or_binario);escreveBinario(or_logico);
OU binrio:
Resultado:
Entrada:u = 00011001v = 00010101
Sada:u | v 00011101u || v 00000001
Resultado:
Entrada:u = 00011001v = 00010101
Sada:u | v 00011101u || v 00000001
>
Or01
-
16/05/2011 09:54 19
Curso C - IC/UNICAMP
Unifica pares de bits:Unifica pares de bits:
Operaes em Bits
E binrio:
0 0 0 1 0 0 0 1
x
x & y
0 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 1y
0 0 0 1 0 0 0 10 0 0 1 0 0 0 1
x 0 0 1 1 0 1 0 10 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 10 1 0 1 0 0 1 1y&
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
&
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
>
-
16/05/2011 09:54 20
Curso C - IC/UNICAMP
Unifica pares de bits:Unifica pares de bits:
Operaes em Bits
E binrio:
Tabela Verdade:0 & 0 00 & 1 01 & 0 01 & 1 1
Tabela Verdade:0 & 0 00 & 1 01 & 0 01 & 1 1
Operador: &Operador: &
0 0 0 1 0 0 0 1
x
x & y
0 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 1y
0 0 0 1 0 0 0 10 0 0 1 0 0 0 1
x 0 0 1 1 0 1 0 10 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 10 1 0 1 0 0 1 1y&
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
&
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
>
-
16/05/2011 09:54 21
Curso C - IC/UNICAMP
Unifica pares de bits:Unifica pares de bits:
Operaes em Bits
E binrio:
No confundir com o operador &&No confundir com o operador &&
Tabela Verdade:0 & 0 00 & 1 01 & 0 01 & 1 1
Tabela Verdade:0 & 0 00 & 1 01 & 0 01 & 1 1
Operador: &Operador: &
0 0 0 1 0 0 0 1
x
x & y
0 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 1y
0 0 0 1 0 0 0 10 0 0 1 0 0 0 1
x 0 0 1 1 0 1 0 10 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 10 1 0 1 0 0 1 1y&
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
&
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
>
-
16/05/2011 09:54 22
Curso C - IC/UNICAMP
Operaes em Bits
unsigned int u, v;unsigned int and_binario, and_logico;
leBinario(&u);leBinario(&v);
and_binario = u & v;and_logico = u && v;
escreveBinario(and_binario);escreveBinario(and_logico);
E binrio:
Resultado:
Entrada:u = 00001100v = 00001010
Sada:u & v u && v
Resultado:
Entrada:u = 00001100v = 00001010
Sada:u & v u && v
>
And01
-
16/05/2011 09:54 23
Curso C - IC/UNICAMP
Operaes em Bits
unsigned int u, v;unsigned int and_binario, and_logico;
leBinario(&u);leBinario(&v);
and_binario = u & v;and_logico = u && v;
escreveBinario(and_binario);escreveBinario(and_logico);
E binrio:
Resultado:
Entrada:u = 00001100v = 00001010
Sada:u & v 000010000u && v 000000001
Resultado:
Entrada:u = 00001100v = 00001010
Sada:u & v 000010000u && v 000000001
>
And01
-
16/05/2011 09:54 24
Curso C - IC/UNICAMP
Exclui pares de bits iguais:Exclui pares de bits iguais:
Operaes em Bits
OU exclusivo:
^
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
^
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
0 1 1 0 0 1 1 0
x
x ^ y
0 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 1y
0 1 1 0 0 1 1 00 1 1 0 0 1 1 0
x 0 0 1 1 0 1 0 10 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 10 1 0 1 0 0 1 1y
>
-
16/05/2011 09:54 25
Curso C - IC/UNICAMP
Exclui pares de bits iguais:Exclui pares de bits iguais:
Operaes em Bits
OU exclusivo:
Tabela Verdade:0 ^ 0 00 ^ 1 11 ^ 0 11 ^ 1 0
Tabela Verdade:0 ^ 0 00 ^ 1 11 ^ 0 11 ^ 1 0
Operador: ^Operador: ^
^
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
^
valor(unsigned int)
resultado(unsigned int)
valor(unsigned int)
0 1 1 0 0 1 1 0
x
x ^ y
0 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 1y
0 1 1 0 0 1 1 00 1 1 0 0 1 1 0
x 0 0 1 1 0 1 0 10 0 1 1 0 1 0 1
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 1 0 0 1 10 1 0 1 0 0 1 1y
>
-
16/05/2011 09:54 26
Curso C - IC/UNICAMP
Operaes em Bits
unsigned int u, v;unsigned int xor_binario;
leBinario(&u);leBinario(&v);
xor_binario = u ^ v;
escreveBinario(xor_binario);
OU EXCLUSIVO binrio:
Resultado:
Entrada:u = 00001100v = 00001010
Sada:u ^ v
Resultado:
Entrada:u = 00001100v = 00001010
Sada:u ^ v
>
Xor01
-
16/05/2011 09:54 27
Curso C - IC/UNICAMP
Operaes em Bits
unsigned int u, v;unsigned int xor_binario;
leBinario(&u);leBinario(&v);
xor_binario = u ^ v;
escreveBinario(xor_binario);
OU EXCLUSIVO binrio:
Resultado:
Entrada:u = 00001100v = 00001010
Sada:u ^ v 00000110
Resultado:
Entrada:u = 00001100v = 00001010
Sada:u ^ v 00000110
>
Xor01
-
16/05/2011 09:54 28
Curso C - IC/UNICAMP
Operaes em Bits
Deslocamento de bits:
0 0 0 0 1 0 0 0
x
x
-
16/05/2011 09:54 29
Curso C - IC/UNICAMP
Operaes em Bits
Deslocamento de bits:
0 0 0 0 1 0 0 0
x
x
valor(unsigned int)
resultado(unsigned int)
deslocamento
>>
valor(unsigned int)
resultado(unsigned int)
deslocamento
Perde bits
x >> y
>
-
16/05/2011 09:54 30
Curso C - IC/UNICAMP
Operaes em Bits
Deslocamento de bits:
Operadores: >
Operadores: >0 0 0 0 1 0 0 0
x
x
valor(unsigned int)
resultado(unsigned int)
deslocamento
>>
valor(unsigned int)
resultado(unsigned int)
deslocamento
Perde bits
x >> y
>
-
16/05/2011 09:54 31
Curso C - IC/UNICAMP
Operaes em Bits
unsigned int v;unsigned int v_direita, v_esquerda;
leBinario(&v);
v_esquerda = v > 3;
escreveBinario(v_esquerda);escreveBinario(v_direita);
Deslocamento binrio:
Resultado:
Entrada:v = 10010010
Sada:v > 3
Resultado:
Entrada:v = 10010010
Sada:v > 3
>
Deslocamento01
-
16/05/2011 09:54 32
Curso C - IC/UNICAMP
Operaes em Bits
unsigned int v;unsigned int v_direita, v_esquerda;
leBinario(&v);
v_esquerda = v > 3;
escreveBinario(v_esquerda);escreveBinario(v_direita);
Deslocamento binrio:
Resultado:
Entrada:v = 10010010
Sada:v > 3 00010010
Resultado:
Entrada:v = 10010010
Sada:v > 3 00010010
>
Deslocamento01
-
16/05/2011 09:54 33
Curso C - IC/UNICAMP
Selecionar alguns bits de uma palavra Selecionar alguns bits de uma palavra
Operaes em Bits
Mscara de bits:
b7 b6 b5 b4 b3 b2 b1 b0Bits desejados: 1 e 4
palavra
>
-
16/05/2011 09:54 34
Curso C - IC/UNICAMP
Selecionar alguns bits de uma palavra Selecionar alguns bits de uma palavra
Operaes em Bits
Mscara de bits:
b7 b6 b5 b4 b3 b2 b1 b0Bits desejados: 1 e 4
Mscara:
palavra
>
0 0 0 1 0 0 1 0
-
16/05/2011 09:54 35
Curso C - IC/UNICAMP
Selecionar alguns bits de uma palavra Selecionar alguns bits de uma palavra
Operaes em Bits
Mscara de bits:
b7 b6 b5 b4 b3 b2 b1 b0Bits desejados: 1 e 4
0 0 0 1 0 0 1 0Mscara:
Seleo dos bits: E b7 b6 b5 b4 b3 b2 b1 b00 0 0 0 0 0
palavra
>
-
16/05/2011 09:54 36
Curso C - IC/UNICAMP
Mscara: nmero inteiro e binrio Mscara: nmero inteiro e binrio
Operaes em Bits
Representao de mscara de bits:
Mscara:
>
-
16/05/2011 09:54 37
Curso C - IC/UNICAMP
Mscara: nmero inteiro e binrio Mscara: nmero inteiro e binrio
Operaes em Bits
Representao de mscara de bits:
Mscara:
Representao numrica: 0 0 0 1 0 0 1 0
Lacunas: dgito 1
Demais: dgito 0
1 2
>
-
16/05/2011 09:54 38
Curso C - IC/UNICAMP
Mscara: nmero inteiro e binrio Mscara: nmero inteiro e binrio
Operaes em Bits
Representao de mscara de bits:
Mscara:
Representao numrica: 0 0 0 1 0 0 1 0
Lacunas: dgito 1
Demais: dgito 0
Em decimal: 000100102 = 24 + 21 = 18
Em hexa: = 1216
1 2
>
-
16/05/2011 09:54 39
Curso C - IC/UNICAMP
Selecionar primeiro bit: Selecionar primeiro bit:
Operaes em Bits
Exemplo de mscara:
b7 b6 b5 b4 b3 b2 b1 b0b15b14b13b12b11b10 b9 b8
>
-
16/05/2011 09:54 40
Curso C - IC/UNICAMP
Selecionar primeiro bit: Selecionar primeiro bit:
Operaes em Bits
Exemplo de mscara:
b7 b6 b5 b4 b3 b2 b1 b0b15b14b13b12b11b10 b9 b8
0 0 0 0 0 0 0 10 0 0 0 0 0 0 0
0 10 0
>
-
16/05/2011 09:54 41
Curso C - IC/UNICAMP
Selecionar primeiro bit: Selecionar primeiro bit:
Operaes em Bits
Exemplo de mscara:
b7 b6 b5 b4 b3 b2 b1 b0b15b14b13b12b11b10 b9 b8
0 0 0 0 0 0 0 10 0 0 0 0 0 0 0
Representao numrica:
Em decimal: 00000000 000000012 = 20 = 1
Em hexa = 116Em C: 0x0001
0 10 0
>
-
16/05/2011 09:54 42
Curso C - IC/UNICAMP
Intervalo de bits de 4 a 12: Intervalo de bits de 4 a 12:
Operaes em Bits
Exemplo de mscara:
b7 b6 b5 b4 b3 b2 b1 b0b15b14b13b12b11b10 b9 b8
>
-
16/05/2011 09:54 43
Curso C - IC/UNICAMP
Intervalo de bits de 4 a 12: Intervalo de bits de 4 a 12:
Operaes em Bits
Exemplo de mscara:
b7 b6 b5 b4 b3 b2 b1 b0b15b14b13b12b11b10 b9 b8
1 1 1 1 0 0 0 00 0 0 1 1 1 1 1
F 01 F
>
-
16/05/2011 09:54 44
Curso C - IC/UNICAMP
Intervalo de bits de 4 a 12: Intervalo de bits de 4 a 12:
Operaes em Bits
Exemplo de mscara:
b7 b6 b5 b4 b3 b2 b1 b0b15b14b13b12b11b10 b9 b8
1 1 1 1 0 0 0 00 0 0 1 1 1 1 1
Representao numrica:
Em decimal: 00011111 111100002 = 8176
Em hexa = 1FF016Em C: 0x1FF0
F 01 F
>
-
16/05/2011 09:54 45
Curso C - IC/UNICAMP
Todos, exceto bit 5: Todos, exceto bit 5:
Operaes em Bits
Exemplo de mscara:
b7 b6 b5 b4 b3 b2 b1 b0b15b14b13b12b11b10 b9 b8
>
-
16/05/2011 09:54 46
Curso C - IC/UNICAMP
Todos, exceto bit 5: Todos, exceto bit 5:
Operaes em Bits
Exemplo de mscara:
b7 b6 b5 b4 b3 b2 b1 b0b15b14b13b12b11b10 b9 b8
1 1 0 1 1 1 1 11 1 1 1 1 1 1 1
D FF F
>
-
16/05/2011 09:54 47
Curso C - IC/UNICAMP
Todos, exceto bit 5: Todos, exceto bit 5:
Operaes em Bits
Exemplo de mscara:
b7 b6 b5 b4 b3 b2 b1 b0b15b14b13b12b11b10 b9 b8
1 1 0 1 1 1 1 11 1 1 1 1 1 1 1
Representao numrica:
Em decimal: 11111111 110111112 = 65503
Em hexa = FFDF16Em C: 0xFFDF
D FF F
>
-
16/05/2011 09:54 48
Curso C - IC/UNICAMP
Procedimento:
Descobrir mscara
Aplicar E binrio
Verificar com IF
Procedimento:
Descobrir mscara
Aplicar E binrio
Verificar com IF
Operaes em Bits
Verificar valor de um bit:
>
-
16/05/2011 09:54 49
Curso C - IC/UNICAMP
Procedimento:
Descobrir mscara
Aplicar E binrio
Verificar com IF
Procedimento:
Descobrir mscara
Aplicar E binrio
Verificar com IF
Operaes em Bits
Verificar valor de um bit:
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
>
-
16/05/2011 09:54 50
Curso C - IC/UNICAMP
Procedimento:
Descobrir mscara
Aplicar E binrio
Verificar com IF
Procedimento:
Descobrir mscara
Aplicar E binrio
Verificar com IF
Operaes em Bits
Verificar valor de um bit:
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 0 0 00 0
0 0 b5 0 0 0 0 0
& (E binrio)
=
>
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
-
16/05/2011 09:54 51
Curso C - IC/UNICAMP
Verificar valor do bit 5: Verificar valor do bit 5:
Operaes em Bits
Exemplo:
unsigned int v;leBinario(&v);
if ( v & 0x0020 ) {printf(Bit 5 1);
} else {printf(Bit 5 0);
}
>
LerBit01
-
16/05/2011 09:54 52
Curso C - IC/UNICAMP
Verificar valor do bit 5: Verificar valor do bit 5:
Operaes em Bits
Exemplo:
unsigned int v;leBinario(&v);
if ( v & 0x0020 ) {printf(Bit 5 1);
} else {printf(Bit 5 0);
}
Mscara para
00000000 0010000
>
LerBit01
-
16/05/2011 09:54 53
Curso C - IC/UNICAMP
Mudar para 1:
Descobrir mscara
Aplicar OU binrio
Mudar para 1:
Descobrir mscara
Aplicar OU binrio
Operaes em Bits
Alterar o valor de um bit:
>
-
16/05/2011 09:54 54
Curso C - IC/UNICAMP
Mudar para 1:
Descobrir mscara
Aplicar OU binrio
Mudar para 1:
Descobrir mscara
Aplicar OU binrio
Operaes em Bits
Alterar o valor de um bit:
OU binrio0 | 0 01 | 0 10 | 1 11 | 1 1
OU binrio0 | 0 01 | 0 10 | 1 11 | 1 1
>
-
16/05/2011 09:54 55
Curso C - IC/UNICAMP
Mudar para 1:
Descobrir mscara
Aplicar OU binrio
Mudar para 1:
Descobrir mscara
Aplicar OU binrio
Operaes em Bits
Alterar o valor de um bit:
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 0 0 00 0
| (OU binrio)
=
b7 b6 1 b4 b3 b2 b1 b0
>
OU binrio0 | 0 01 | 0 10 | 1 11 | 1 1
OU binrio0 | 0 01 | 0 10 | 1 11 | 1 1
-
16/05/2011 09:54 56
Curso C - IC/UNICAMP
Mudar para 0:
Descobrir mscara
Inverter mscara
(no binrio)
Aplicar E binrio
Mudar para 0:
Descobrir mscara
Inverter mscara
(no binrio)
Aplicar E binrio
Operaes em Bits
Alterar o valor de um bit:
>
-
16/05/2011 09:54 57
Curso C - IC/UNICAMP
Mudar para 0:
Descobrir mscara
Inverter mscara
(no binrio)
Aplicar E binrio
Mudar para 0:
Descobrir mscara
Inverter mscara
(no binrio)
Aplicar E binrio
Operaes em Bits
Alterar o valor de um bit:
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
>
-
16/05/2011 09:54 58
Curso C - IC/UNICAMP
Mudar para 0:
Descobrir mscara
Inverter mscara
(no binrio)
Aplicar E binrio
Mudar para 0:
Descobrir mscara
Inverter mscara
(no binrio)
Aplicar E binrio
Operaes em Bits
Alterar o valor de um bit:
b7 b6 b5 b4 b3 b2 b1 b0
1 0 1 1 1 11 1
& (E binrio)
=
b7 b6 0 b4 b3 b2 b1 b0
>
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
-
16/05/2011 09:54 59
Curso C - IC/UNICAMP
Trocar valor de um bit:
Descobrir mscara
Aplicar OU exclusivo
Trocar valor de um bit:
Descobrir mscara
Aplicar OU exclusivo
Operaes em Bits
Alterar o valor de um bit:
>
-
16/05/2011 09:54 60
Curso C - IC/UNICAMP
Trocar valor de um bit:
Descobrir mscara
Aplicar OU exclusivo
Trocar valor de um bit:
Descobrir mscara
Aplicar OU exclusivo
Operaes em Bits
Alterar o valor de um bit:
OU exclusivo0 ^ 0 01 ^ 0 10 ^ 1 11 ^ 1 0
OU exclusivo0 ^ 0 01 ^ 0 10 ^ 1 11 ^ 1 0
>
-
16/05/2011 09:54 61
Curso C - IC/UNICAMP
Trocar valor de um bit:
Descobrir mscara
Aplicar OU exclusivo
Trocar valor de um bit:
Descobrir mscara
Aplicar OU exclusivo
Operaes em Bits
Alterar o valor de um bit:
b7 b6 b5 b4 b3 b2 b1 b0
0 1 0 0 0 00 0
^ (OU exclusivo)
=
b7 b6 b5 b4 b3 b2 b1 b0
>
OU exclusivo0 ^ 0 01 ^ 0 10 ^ 1 11 ^ 1 0
OU exclusivo0 ^ 0 01 ^ 0 10 ^ 1 11 ^ 1 0
-
16/05/2011 09:54 62
Curso C - IC/UNICAMP
Mudar o valor do bit 5: Mudar o valor do bit 5:
Operaes em Bits
Exemplo:
unsigned int u, v, w, x;// Mudar para 1:
v = u | 0x0020 ;// Mudar para 0:
w = u & (~0x0020) ;// Inverter:
w = u ^ 0x0020 ;
>
AtribuirBit01
-
16/05/2011 09:54 63
Curso C - IC/UNICAMP
Procedimento:
Descobrir mscara do intervalo
Filtrar bits com E binrio
Deslocar bits para direita
Procedimento:
Descobrir mscara do intervalo
Filtrar bits com E binrio
Deslocar bits para direita
Operaes em Bits
Ler um intervalo:
>
-
16/05/2011 09:54 64
Curso C - IC/UNICAMP
Procedimento:
Descobrir mscara do intervalo
Filtrar bits com E binrio
Deslocar bits para direita
Procedimento:
Descobrir mscara do intervalo
Filtrar bits com E binrio
Deslocar bits para direita
Operaes em Bits
Ler um intervalo:
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
>
-
16/05/2011 09:54 65
Curso C - IC/UNICAMP
Procedimento:
Descobrir mscara do intervalo
Filtrar bits com E binrio
Deslocar bits para direita
Procedimento:
Descobrir mscara do intervalo
Filtrar bits com E binrio
Deslocar bits para direita
Operaes em Bits
Ler um intervalo:
b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 0 00 0
& (E binrio)
=
0 b6 b5 b4 0 0 0 0
>> 4
0 0 0 0 0 b6 b5 b4
>
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
-
16/05/2011 09:54 66
Curso C - IC/UNICAMP
Extrair nmero no intervalo 4 - 6 Extrair nmero no intervalo 4 - 6
Operaes em Bits
Exemplo:
unsigned int u, v, w;
>
LerFaixaBits01
-
16/05/2011 09:54 67
Curso C - IC/UNICAMP
Extrair nmero no intervalo 4 - 6 Extrair nmero no intervalo 4 - 6
Operaes em Bits
Exemplo:
unsigned int u, v, w;// Extrair intervalo
v = u & 0x0070 ;
>
u x y z
b7 b6 b5 b4 b3 b2 b1 b0
0 1 1 1 0 0 0 0m
u x y zx y z
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
0 1 1 1 0 0 0 00 1 1 1 0 0 0 0m
0 x y z 0 0 0 0v = u & m 0 x y z 0 0 0 00 x y z 0 0 0 0v = u & m
-
16/05/2011 09:54 68
Curso C - IC/UNICAMP
Extrair nmero no intervalo 4 - 6 Extrair nmero no intervalo 4 - 6
Operaes em Bits
Exemplo:
unsigned int u, v, w;// Extrair intervalo
v = u & 0x0070 ;// Deslocar:
w = v >> 4
>
LerFaixaBits01
0 x y z 0 0 0 0
u
v = u & m
x y z
b7 b6 b5 b4 b3 b2 b1 b0
0 1 1 1 0 0 0 0m
0 0 0 0 0 x y zv >> 4
0 x y z 0 0 0 00 x y z 0 0 0 0
u
v = u & m
x y zx y z
b7 b6 b5 b4 b3 b2 b1 b0b7 b6 b5 b4 b3 b2 b1 b0
0 1 1 1 0 0 0 00 1 1 1 0 0 0 0m
0 0 0 0 0 x y z0 0 0 0 0 x y zv >> 4
-
16/05/2011 09:54 69
Curso C - IC/UNICAMP
Passo 1: Apagar bits na palavra
Descobrir mscara invertida do intervalo
Aplicar E binrio para apagar
Passo 1: Apagar bits na palavra
Descobrir mscara invertida do intervalo
Aplicar E binrio para apagar
Operaes em Bits
Atribuir um intervalo de bits:
>
-
16/05/2011 09:54 70
Curso C - IC/UNICAMP
Passo 1: Apagar bits na palavra
Descobrir mscara invertida do intervalo
Aplicar E binrio para apagar
Passo 1: Apagar bits na palavra
Descobrir mscara invertida do intervalo
Aplicar E binrio para apagar
Operaes em Bits
Atribuir um intervalo de bits:
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
>
-
16/05/2011 09:54 71
Curso C - IC/UNICAMP
Passo 1: Apagar bits na palavra
Descobrir mscara invertida do intervalo
Aplicar E binrio para apagar
Passo 1: Apagar bits na palavra
Descobrir mscara invertida do intervalo
Aplicar E binrio para apagar
Operaes em Bits
Atribuir um intervalo de bits:
b7 x6 x5 x4 b3 b2 b1 b0
0 0 0 1 1 11 1
& (E binrio)
=
b7 0 0 0 b3 b2 b1 b0
>
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
E binrio0 & 0 01 & 0 00 & 1 01 & 1 1
-
16/05/2011 09:54 72
Curso C - IC/UNICAMP
Passo 2:
Deslocar para a esquerda
Aplicar OU binrio para copiar bits
Passo 2:
Deslocar para a esquerda
Aplicar OU binrio para copiar bits
Operaes em Bits
Atribuir um intervalo de bits:
>
-
16/05/2011 09:54 73
Curso C - IC/UNICAMP
Passo 2:
Deslocar para a esquerda
Aplicar OU binrio para copiar bits
Passo 2:
Deslocar para a esquerda
Aplicar OU binrio para copiar bits
Operaes em Bits
Atribuir um intervalo de bits:
0 0 0 0 0 b6 b5 b4
0 b6 b5 b4 0 0 0 0
-
16/05/2011 09:54 74
Curso C - IC/UNICAMP
Passo 2:
Deslocar para a esquerda
Aplicar OU binrio para copiar bits
Passo 2:
Deslocar para a esquerda
Aplicar OU binrio para copiar bits
Operaes em Bits
Atribuir um intervalo de bits:OU binrio0 | 0 01 | 0 10 | 1 11 | 1 1
OU binrio0 | 0 01 | 0 10 | 1 11 | 1 1
0 0 0 0 0 b6 b5 b4
0 b6 b5 b4 0 0 0 0
AtribuirFaixaBits01
-
16/05/2011 09:54 75
Representao Binria
TrocaBit01
-
16/05/2011 09:54 76
Representao Binria
Fim
top related