I earlier wrote: . . . 0x20000000. That is 0xffffffff / 8.
Try it and see. You will see that 0xffffffff / 8 is
0x20000000 0x1fffffff.
So, either my interpretation of 0 to 0xffffffff is mistaken, or the arithmetic is mistaken and it should read 0xffffffff / 8 + 1.
Actually, it is bad style to write numbers out like that. It would have been better to write
TOTAL_NUMBER_OF_BITS / BITS_PER_BYTE + (TOTAL_NUMBER_OF_BITS % BITS_PER_BYTE == 0 ? 0 : 1)