0
我想在C++中使用下面的算法檢查一個無符號long long的設置位,它只檢查位是否設置或不是。但我的問題是我得到的答案是錯誤的。請幫我理解unsigned long long是如何存儲在二進制文件中的。unsigned long long to binary
代碼:
#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位之後。
感謝您指出我的錯誤。 – g4ur4v 2013-03-16 22:03:27
@ g4ur4v沒問題。順便說一句,請避免(無符號long long)* 8,而不是乘以8(kindof幻數)使用CHAR_BIT(它更具可讀性)http://stackoverflow.com/questions/3200954/what-is-char-bit – 2013-03-16 22:06:08