我正在尝试使用以下算法检查 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 位之后重复自身。