С кодом ниже я смог получить следующий вывод
(0xFF00000000000010) 9
Убедитесь, что вы используете правильные значения размера. Для литеральных констант необходимо ULL
, чтобы они соответствовали uint64_t, а переменные цикла for должны быть только целыми числами, а также возвращаемым значением для countBits64
.
uint64_t bitsToInt64(char *bs) {
uint64_t r;
int i;
r = 0;
for(i = 0; i < 64; i++)
if(bs[i] == 1)
r |= 1ULL << i;
return r;
}
int countBits64(uint64_t i) {
int x, t = 0;
for(x = 0; x < 64; x++) {
if(i & (1ULL << x))
t += 1;
}
return t;
}
char bits [] = {
0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1,};
uint64_t mask = bitsToInt64(bits);
int nbits = countBits64(mask);
printf("(0x%016llX) %d",mask, nbits);