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