64-битное вычисление четности Возвращает странный ответ

Я пытаюсь найти четность чисел, используя простой цикл, который проверяет каждый установленный бит и увеличивает счетчик. Кажется, у меня есть дополнительный бит по адресам за пределами 32 бит. Например, при попытке найти четность 1, которая должна быть нечетной и иметь «1» в индексе 0, я получаю «1» в индексах 0 и 32. Любая помощь будет принята с благодарностью. Код и вывод ниже:

Код C ++:

#include <cstdio>
#include <cstdlib>bool compute_parity(int64_t val){
int int_size = 64;
int par_sum = 0;
printf("indexes where there are '1's:\n");
for(int i=0; i<int_size;i++){
if(val & 1<<i){
printf("%d\n", i);
par_sum++;
}
}
printf("\n");
printf("number of '1's: %d\n", par_sum);
printf("\n");
if(par_sum & 1)//if par_sum is odd
return true;
return false;
}

int main(){
//int64_t val = 9223372036854775807;
int64_t val = 1;
printf("parity: %s\n", compute_parity(val) ? "odd" : "even");
}

Выход для compute_parity (1):

indexes where there are '1's:
0
32

number of '1's: 2

parity: even

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]