Ради интереса, я немного изменил ваш пример кода для ясности
#include <stdio.h>
int bitcount(unsigned long i) {
int count = 0;
while (i > 0) {
count++;
i>>=1;
}
return count;
}
int main(int argc, char *argv[]) {
/**
* Prints out powers of 2 for 32 iterations.
*/
int iterations = 0;
int value = 1;
while (iterations <= 32) {
// Prints in this format: iterations 2^n value
printf("%d\t2^%u\t%u\t\t%d bit\n", iterations+1, iterations, value, bitcount(value));
value *= 2;
++iterations;
}
return 0;
}
Вы заметите, что 127
- это 8 bit
, а 256
- это 9 bit
. Это потому что
127 = 1000 0000
256 = 1 0000 0000
Также 2^32
- это 0
, потому что
2^32 = 1 0000 0000 ... 0000 0000 (overflow for int)
= 0000 0000 ... 0000 0000 = 0 (only the first 32 bits are preserved)