unsigned long long to binary

时间:2013-03-16 21:46:47

标签: binary unsigned-long-long-int

我试图使用下面的算法检查c ++中无符号long long的设置位,该算法仅检查该位是否设置。但我的问题是我得到的答案是错误的。请帮助我理解如何无符号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位之后重复。

1 个答案:

答案 0 :(得分:2)

我认为你所拥有的是位集宏中的一个问题,请用

替换它
#define CHECK_BIT(var,pos) ((var) & (1LL<<(pos)))
相关问题