如何操作64位?

时间:2013-08-02 10:23:27

标签: c++ bitmask

我试图操纵64位。我使用数字存储在unsigned long long int中。为了测试porcess,我运行了以下程序

#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位?修正在哪里?实际上我试图找到奇偶校验,即二进制表示中1的数字小于2 ^ 63。

3 个答案:

答案 0 :(得分:4)

对于它的64位,你应该使用64位1.所以,试试这个:

if(((unsigned long long) 1<<i)&x)

答案 1 :(得分:2)

(1<<i)大于32

时,

i会溢出

你可以写出像(x >> i) & 1

这样的条件

答案 2 :(得分: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;
 }