0

我正在尝试使用一个简单的循环来查找数字的奇偶校验,该循环检查每个设置位并增加一个计数器。尽管在 32 位之外的地址上,我似乎有额外的位。例如,当试图找到 1 的奇偶校验时,它应该是奇数并且在索引 0 处有一个“1”,我在索引 0 和 32 处得到一个“1”。任何帮助将不胜感激。代码和输出如下:

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
4

0 回答 0