0

我正在尝试使用以下算法检查 c++ 中 unsigned long long 的设置位,该算法仅检查该位是否已设置。但我的问题是我得到的答案是错误的。请帮助我了解 unsigned long long 是如何以二进制形式存储。

代码:

#include<stdio.h>
#include<iostream>
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
using namespace std;
int main()
{
    int pos=sizeof(unsigned long long)*8;
    unsigned long long a;
    cin>>a;
    pos=pos-1;
    while(pos>=0)
    {
        if(CHECK_BIT(a,pos))
          cout<<"1";
        else
          cout<<"0";
        --pos;
    }
}

输入 :

1000000000000000000

输出:

1010011101100100000000000000000010100111011001000000000000000000

预期输出:

110111100000101101101011001110100111011001000000000000000000

同样对于另一个输入:

14141

输出 :

0000000000000000001101110011110100000000000000000011011100111101

预期输出:

11011100111101

在第二个示例中(实际上对于任何小数字),二进制模式只是在 32 位之后重复自身。

4

1 回答 1

2

我认为您所遇到的是位集宏中的问题,请用/替换它

#define CHECK_BIT(var,pos) ((var) & (1LL<<(pos)))
于 2013-03-16T21:57:39.463 回答