2013-03-16 177 views
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位之後。

回答

2

我覺得你有什麼是位設置宏問題,請更換它瓦特/

#define CHECK_BIT(var,pos) ((var) & (1LL<<(pos))) 
+0

感謝您指出我的錯誤。 – g4ur4v 2013-03-16 22:03:27

+1

@ g4ur4v沒問題。順便說一句,請避免(無符號long long)* 8,而不是乘以8(kindof幻數)使用CHAR_BIT(它更具可讀性)http://stackoverflow.com/questions/3200954/what-is-char-bit – 2013-03-16 22:06:08