我试图操纵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。
答案 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;
}