我试图使用下面的算法检查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位之后重复。
答案 0 :(得分:2)
我认为你所拥有的是位集宏中的一个问题,请用
替换它#define CHECK_BIT(var,pos) ((var) & (1LL<<(pos)))