Przygotowuję się do wywiadu z wykorzystaniem tekstu "Cracking the Coding Interview" autorstwa Gayle Laakman McDowell. W dziale dotyczącym manipulacji bitami są dwie funkcje, ale nie do końca rozumiem, jak to działa.manipulacja bitami: usuwanie zakresu bitów
// 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;
}
W pierwszej funkcji, rozumiem co (1 << i)
robi oczywiście, ale co nie jestem pewny jest jak odjęcie 1 od tej wartości wpływa bitów (tj (1 << i) - 1)
).
W zasadzie mam takie samo zamieszanie z drugą funkcją. Do jakich efektów, szczególnie na bitach, odejmuje się 1 od ((1 << (i+1))
? Z mojego rozumowania wynika, że ((1 << (i+1))
powoduje powstanie pojedynczego bitu "na", przesuniętego w lewo i + 1 razy - co odejmuje od 1?
Dzięki i mam nadzieję, że to było jasne! Proszę dać mi znać, jeśli są jakieś inne pytania.
Dla tych, którzy przypadkiem mają tekst, do którego się odwołuję, jest on na stronie 91 w 5. Edycji.
Read [To] (http://stackoverflow.com/questions/15729765/why-does-the-output-of-applied-on-a -negatywny-numer-jest-wypełniony-z-tymi-o-tym) i [to] (http://stackoverflow.com/questions/15708493/what-is-jest -meaning-of-this-declaration) odpowiedzi –