KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
In chapter 2, the section on bitwise operators (section 2.9), I'm having trouble understanding how one of the sample methods works. Here's the method provided: unsigned int getbits(unsigned int x, int p, int n) { return (x >> (p + 1 - n)) & ~(~0 << n); } The idea is that, for the given number x , it will return the n bits starting at position p , counting from the right (with the farthest right bit being position 0). Given the following main() method: int main(void) { int x = 0xF994, p = 4, n = 3; int z = getbits(x, p, n); printf("getbits(%u (%x), %d, %d) = %u (%X)\n", x, x, p, n, z, z); return 0; } The output is: getbits(63892 (f994), 4, 3) = 5 (5) I get portions of this, but am having trouble with the "big picture," mostly because of the bits (no pun intended) that I don't understand. The part I'm specifically having issues with is the complements piece: ~(~0 << n) . I think I get the first part, dealing with x ; it's this part (and then the mask) that I'm struggling with -- and how it all comes together to actually retrieve those bits. (Which I've verified it is doing, both with code and checking my results using calc.exe -- thank God it has a binary view!) Any help?
Tags (comma-separated)
Save Edits
Cancel