curso de c - olimpiada.ic.unicamp.br · curso c -ic/unicamp soma de dígitos binários: 0 + 0 = 0 0...

76
16/05/2011 09:54 Copyright@Arnaldo V Moura, Daniel F Ferber 1 Curso de C Operações com Bits

Upload: ledieu

Post on 24-Jan-2019

220 views

Category:

Documents


0 download

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