2

我正在尝试操作 64 位。我使用该数字存储在一个无符号的 long long int 中。为了测试进程,我运行了以下程序

#include <iostream>

using namespace std;

int main()
{
 unsigned long long x = 1;
 int cnt = 0;
 for(int i =0 ;i<64;++i)
 {
    if((1<<i)&x)
    ++cnt;
 }
 cout<<cnt;
 }

但是cnt的输出是2,这显然是错误的。如何操作 64 位?修正在哪里?实际上我试图找到奇偶校验,即小于 2^63 的二进制表示中 1 的数量。

4

3 回答 3

4

因为它是 64 位的,你应该使用 64 位的 1。所以,试试这个:

if(((unsigned long long) 1<<i)&x)
于 2013-08-02T10:44:08.037 回答
2

(1<<i)i大于 32时会溢出

你可以像这样写条件(x >> i) & 1

于 2013-08-02T10:41:35.357 回答
0

在您的情况下,操纵是什么意思?我在想你要测试变量 x 的每一点。您的 x 应该包含最大值,因为您要测试变量 x 的每一位

int main()
{
 unsigned long long x = 0xFFFFFFFFFFFFFFFF;
 int cnt = 0;
 for(int i =0 ;i<64;++i)
 {
    if((1<<i)&x)
    ++cnt;
 }
 cout<<cnt;
 }
于 2013-08-02T10:28:30.603 回答