Discussione: [C] Estrazione bit
View Single Post
Old 25-04-2007, 17:27   #16
k_mishima
Member
 
Iscritto dal: Jan 2007
Messaggi: 173
Codice:
#include <stdio.h>
int PIU_SIGNIFICATIVI(int A,int k);
int MENO_SIGNIFICATIVI(int A,int k);
void dec2bin(unsigned int inp, char binstr[32]);
main()
{

     int A,k,X,n;
     short i,scelta;
     char Array[32];

     puts("Digita un valore A (max 4294967295)");
     scanf("%d",&A);

     puts("Digita quanti bit vuoi estrarre (max 32)");
     scanf("%d",&k);

     puts("Digita se estrarre i bit piu' significativi o meno significativi");
     puts("Meno significativi [0]");
     puts("Piu' significativi [1]");

     scanf("%hd",&scelta);

     while (!(scelta==0 || scelta==1))
     {
         puts ("Scelta errata, riprovare");
         scanf("%hd",&scelta);
     }

     if (scelta==0)
     {
      X=MENO_SIGNIFICATIVI(A,k);
      dec2bin (X,Array);
      printf("Risultato binario X=");
      for (i=k-1;i>=0;i--)
      printf("%c",Array[i]);
     }

     else if (scelta==1)
     {
      X=PIU_SIGNIFICATIVI(A,k);
      dec2bin (X,Array);
      printf("Risultato binario X=");
       for (i=31;i>=(31-k);i--)
        printf("%c",Array[i]);
     }

     printf("\n");
     system("pause");
}

int PIU_SIGNIFICATIVI(int A,int k)
{
     int mask=1;
     //Creazione maschera
     mask=mask<<k;
     mask--;

     mask=mask<<(32-k);

 //  return (int)(((unsigned int) A)>>(32-k));
     return A&mask;
}

int MENO_SIGNIFICATIVI(int A,int k)
{
     short b;
     int mask=0;

     for(b=0;b<k;b++)
     mask=mask<<1|1;
     return mask&A;
}


void dec2bin(unsigned int inp, char binstr[32])
{
    int i;
    for (i = 0; i < 32; i++, inp >>= 1)
        binstr[i] = (inp & 1) + '0';
}
Finalmente finita, dopo ore e ore di prove

@andbin
carina la tua function per il dec2bin, molto compatta, peccato che pero' che non inverta pure l'array che deve essere stampato al contrario, altrimenti sarebbe perfetta
k_mishima è offline   Rispondi citando il messaggio o parte di esso