Mi sto preparando per un'intervista utilizzando il testo "Cracking the Coding Interview" di Gayle Laakman McDowell. Nella sezione che riguarda la manipolazione dei bit, sono disponibili due funzioni, ma non capisco come funziona.manipolazione bit: azzeramento intervallo di bit
// To clear all bits from the most significant bit through i (inclusive), we do:
int clearMSBthroughI(int num, int i) {
int mask = (1 << i) - 1;
return num & mask;
}
// To clear all bits from i through 0 (inclusive), we do:
int clearBitsIthrough0(int num, int i) {
int mask = ~(((1 << (i+1)) - 1);
return num & mask;
}
Nella prima funzione, comprendo cosa (1 << i)
fa naturalmente, ma ciò non sono sicuro di è come sottraendo 1 da questo valore influenza i bit (cioè, (1 << i) - 1)
).
Fondamentalmente ho la stessa confusione con la seconda funzione. A quali effetti, in particolare sui bit, è necessario sottrarre 1 da ((1 << (i+1))
? Dalla mia comprensione, ((1 << (i+1))
si traduce in un singolo bit "on", spostato a sinistra i + 1 volte - cosa significa sottrarre questo di 1?
Grazie e spero sia stato chiaro! Per favore fatemi sapere se ci sono altre domande.
Per coloro che per qualche motivo hanno il testo di riferimento, è a pagina 91 della quinta edizione.
Leggi [questo] (http://stackoverflow.com/questions/15729765/why-does-the-output-of-applied-on-a -negative-number-is-filled-with-ones-on-th) e [this] (http://stackoverflow.com/questions/15708493/what-is-the-meaning-of-this-declaration) risponde –