Ir para conteúdo
Fórum Script Brasil
  • 0

bitwise operators


Guest cc -o

Pergunta

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?

#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");

}

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
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?

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

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --fabio --
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?

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

Link para o comentário
Compartilhar em outros sites

  • 0
Pois é amigo...

esqueci de falar, dessa forma ele funciona mas se eu trocar a odem como você destacou da erro...

valeu

qual erro?

Eu peguei esse seu código e rodei no meu TC, com a lateração que mencionei e de: 01110111 ele passa a 11101110

Não deveria ser este o resultado se usar o vetor de permuta para {8,2,3,5,4,6,7,1}?

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...