[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: manipulacao de bits....quem já viu isso na vida?



Alexandre, eu realmente continuo sem entender nada desse negócio de escovar
bits. A única coisa que sei escovar são meus dentes. Mas, por motivos de
força maior, precisamos sair dessa. A saída que encontrei foi a seguinte:
observei no escreve bits as seguintes linhas:

if ((++j)%8==0) i++, j=0;
w[i] |=(v[k]&01)<<(7-j);

olhei para isso e pensei: ó d'us, vou me matar!
então vi tudo por outro lado: não sei que raios esse código executa de
conta. Mas sei que ele faz o seguinte: lê de oito em oito bits (zeros e uns)
e coloca num único numero.
Tipo: ele lê 0, 1 ,0, 1, 0, 0, 1, 1

aí ele junta: 01010011 e vê o quanto vale isso em decimal. (no meu exemplo
vale 83)

então eu olhei para o huff, na hora que ele imprime os zeros e uns da
solução. é a seguinte linha:

printf("%1d", (code[texto[j]]>>(i-1))&01);

esse comando está dentro de um for, que imprime TODOS os bits da solução.
cada elemento
(code[texto[j]]>>(i-1))&01) é simplesmente um 0 ou um 1


pus um contador que conta de 1 a 8 nessa parte do programa. Quando chega no
8, ele tem o byte completo. Aí eu imprimo esse byte no arquivo compactado.
Entendeu?

Espero ter sido útil, assim como muita gente tá me ajudando! Obrigado!


Daniel Cukier



-----Mensagem original-----
De: Alexandre Freire <alex@linux.ime.usp.br>
Para: yoshi-mac122@ime.usp.br <yoshi-mac122@ime.usp.br>
Data: Quinta-feira, 10 de Dezembro de 1998 21:33
Assunto: manipulacao de bits....quem já viu isso na vida?


>eu estou prescisando de ajuda com o seguinte trech do huff.c:
>printf("%ld",(code[k]>>(i-1))&01);
>alguem pode me explicar oque isso faz? com algums exemplos por favor, eu
>sei que a andrea mandou uma menssagem sobre o >> e o &01 mas ainda nao
>entendo como este processo todo funciona...
>grato de antemao!
>@lex
>
> Alexandre Freire      <alex@linux.ime.usp.br>
>
>