Originariamente inviato da MItaly
2. Se è una costante te la calcoli da te, basta convertire il numero binario che rappresenta la tua maschera in esadecimale o in decimale e usarlo assieme all'operatore &.
3. Ci sono più modi. Uno molto semplice è:
codice:
unsigned int maschera = ~((~0u)<<numero_bit);
  • ~0u ottiene un intero senza segno che ha tutti i bit a 1 (parte come tutto zero, quindi ci viene applicato l'operatore not bitwise che lo fa diventare tutto uni);
  • al numero così ottenuto viene applicato uno shift verso sinistra di numero_bit; quando si effettua uno shift a sinistra da destra entrano degli zeri, così ora il numero avrà numero_bit zeri a destra, alla cui sinistra ci saranno tutti gli uni;
  • al numero in questione viene nuovamente applicato il not binario, che converte gli uni in zeri e viceversa; si ottiene così la maschera desiderata.

Esempio (con numero_bit=4):
codice:
0u              0000000000000000
~0u             1111111111111111
~0u<<4          1111111111110000
~((~0u)<<4)     0000000000001111
mi trovo perfettamente;
thx
------------------------------------------------------------------------------------------


quindi volendo applicare per estrarre bit meno significativi al mio codice
codice:
void estrai_bit_meno_sign( short A, short k)
{
    unsigned short mask=~((~0u)<<k);

   A=A&mask;      */ applico & per i bit meno significativi /*
}
poi nel main

codice:
printf("quanti bit meno significativi vuoi estrarre?  :");
  scanf("%d",&k);

  printf("i bit meno significativi: ");
   estrai_bit(A,k);
   for(i=0; i<k; i++){
   bit_short(A,bit);
   printf(" %1u",bit[i]);
}
quando vado ad eseguirlo mi restituisce sempre i bit 0