Guest cc -o Postado Dezembro 24, 2007 Denunciar Share Postado Dezembro 24, 2007 Seguinte, estou tentando criar este programinha mas barei na função permuta. Todas estão funcionandomenos essa.Essa função teria que permutar os bits da variável de acordo com o vetor passado como parâmetro.Alguém pode analizar para mim?#include <stdio.h> void setbit(char *n , int posic, int valor) { if (valor == 0) { *n = *n & (~(1 << (posic-1))); } else if (valor == 1) { *n = *n | (1 << (posic-1)); } } unsigned char getbit(unsigned char n, int posic) { n=n>>(posic-1); n= n & 0x01; return n; } void printbits(unsigned char n) { int i; for(i=8;i>0;i--) printf("%d", getbit(n,i)); } void permutar(unsigned char *n,int *p) { int i; unsigned char aux=*n; char result; /*resultado temporario*/ for(i=0;i<8;i++) setbit(&result,(i+1),getbit(aux,p[i])); *n=result; } main() { unsigned char a; int permuta[8]={1,2,3,4,5,6,7,8}; a=0x77; printbits(a); printf("\n"); permutar(&a,permuta); printbits(a); printf("\n"); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 25, 2007 Denunciar Share Postado Dezembro 25, 2007 Seguinte, estou tentando criar este programinha mas barei na função permuta. Todas estão funcionandomenos essa.Essa função teria que permutar os bits da variável de acordo com o vetor passado como parâmetro.Alguém pode analizar para mim?ela está fazendo o que você esta pedindo.você já fez o teste de mesa com os valores que inicializou? Faça e você verá que está certo.for(i=0;i<8;i++) setbit(&result,(i+1),getbit(aux,p[i]));veja que, para i=0, você chama setbit passando o valor a ser comutado do bit i+1 que é 1 e com o valor bit em p que é 1.A menos que eu tenha entendido errado, e pela seqüência que você declarou no seu array p, você está comutando cada bit com ele mesmo, logo nada muda.Experimente modificar seu vetor de permuta para {8,2,3,5,4,6,7,1}Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --fabio -- Postado Dezembro 25, 2007 Denunciar Share Postado Dezembro 25, 2007 Seguinte, estou tentando criar este programinha mas barei na função permuta. Todas estão funcionandomenos essa.Essa função teria que permutar os bits da variável de acordo com o vetor passado como parâmetro.Alguém pode analizar para mim?ela está fazendo o que você esta pedindo.você já fez o teste de mesa com os valores que inicializou? Faça e você verá que está certo.for(i=0;i<8;i++) setbit(&result,(i+1),getbit(aux,p[i]));veja que, para i=0, você chama setbit passando o valor a ser comutado do bit i+1 que é 1 e com o valor bit em p que é 1.A menos que eu tenha entendido errado, e pela seqüência que você declarou no seu array p, você está comutando cada bit com ele mesmo, logo nada muda.Experimente modificar seu vetor de permuta para {8,2,3,5,4,6,7,1}Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Dezembro 25, 2007 Denunciar Share Postado Dezembro 25, 2007 Pois é amigo...esqueci de falar, dessa forma ele funciona mas se eu trocar a odem como você destacou da erro...valeu Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 26, 2007 Denunciar Share Postado Dezembro 26, 2007 Pois é amigo...esqueci de falar, dessa forma ele funciona mas se eu trocar a odem como você destacou da erro...valeuqual erro?Eu peguei esse seu código e rodei no meu TC, com a lateração que mencionei e de: 01110111 ele passa a 11101110Não deveria ser este o resultado se usar o vetor de permuta para {8,2,3,5,4,6,7,1}? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest cc -o
Seguinte, estou tentando criar este programinha mas barei na função permuta. Todas estão funcionando
menos essa.
Essa função teria que permutar os bits da variável de acordo com o vetor passado como parâmetro.
Alguém pode analizar para mim?
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.