[C] estrarre i bit meno significativi

di il
3 risposte

[C] estrarre i bit meno significativi

Function per l estrazione tramite una mask dei k bit meno significativi della mia variabile intera short *n data in input
n_len=8

mi genera dei bit non corrispondenti
void estrai_bit_meno_sign(short *n, short k,unsigned char bit[n_len])
{unsigned short mask=~((~0u)<<k);
short i;
   i=n_len-1;
     do        {
               bit[--i]=*n&1;
               *n=*n^mask;
               } while(*n !=0 && i>=0);
     if(i>=0)
     {
     do{
            bit[--i]=0;
       }while(i>=0);
       }
       for(i=0; i<k; i++){
   printf("%u",bit[i]);
}
}

3 Risposte

  • Re: [C] estrarre i bit meno significativi

    Secondo me hai reso difficile una cosa banale.. Scusa tu devi estrarre i k bit meno significativi tramite una maschera.. Prima cosa devi creare una maschera con i k bit meno significativi con valore 1 ed il resto a 0. Fatto ciò ti basta fare una & tra la variabile in input e la maschera..
    short estr_bit_M_m (unsigned short a, unsigned short k)
    {
          unsigned short mask=0;
          int i;
          for(i=0;i<k;i++) 
          {
              mask=mask<<1|1; //formo una maschera con la or a 1 e poi shifto di uno a sinistra, faccio questo per n volte
          }
          a=a&mask; //and per estrarre i bit con la maschera
          return a;
    }
    Per visualizzare i bit basta creare un'altra semplicissima funzione.. Gli passi la variabile a che contiene i bit estratti e un array di size x e inserisci tutti i bit nell'array per poi visualizzarli..
  • Re: [C] estrarre i bit meno significativi

    Prima cosa devi creare una maschera con i k bit meno significativi con valore 1 ed il resto a 0
    La maschera l'ha creata. sbaglia a crearsi il buffer.
    Forse con l'array di char intendeva fare una roba tipo:
    
    unsigned short estrai_bit_meno_sign(unsigned short n, unsigned short k,unsigned char bit[n_len])
    {
      unsigned short mask=~((~0u)<<k);
      unsigned short bit_value;
      int i,j;
      i=n_len;
    
      if (k > sizeof(unsigned short)*8)
      {
        fprintf (stderr, "Err!!!\n");
        return 0;
      }
        
      bit_value=n & mask;
    
      // Ora si forma il buff ma....
      // x comodità di visualizzazione includiamo il \0 terminale 
      // Se non necessario remmare la riga sotto. Se necessaria uno short da 16 bit necessita 17 chars 
      bit[--i]='\0';
      //
      for (--i,j=0;i>=0;j++,i--)
        bit[i]=(bit_value & (1<<j)) ? '1' : '0';
    
      return bit_value;
    }
    
  • Re: [C] estrarre i bit meno significativi

    Esatto ixamit

Devi accedere o registrarti per scrivere nel forum
3 risposte