2014-01-21 26 views
-1

我寫了一些代碼,需要計算一個數字大小爲10^19的設置位數。我使用C++,我用unsigned long long int來存儲數字。我爲它寫了兩個版本,一個使用bitset,一個沒有它。上述棘手的bitset應用程序,在輸出中的錯誤

unsigned long long int b; 
    cin>>b; 
    int cnt=0; 
    while(b){ 
     if(b&1)cnt++; 
     b>>=1; 
    } 

的代碼給出正確results.However使用位集下面的代碼會產生不正確results.Though似乎它應以完全相同的方式工作。

unsigned long long int b; 
    cin>>b; 
    bitset<64>foo(b); 
    int cnt=foo.count(); 

注意,無符號長long int類型將適合在64位,10^19 < 2^64.Some額外的細節:所以這個問題文本犯規變得醜陋,我加入了完整的代碼作爲ideone鏈路,音符線51〜57 http://ideone.com/4Yamhz

+0

你有一個輸入數字,可以複製這個問題? – juanchopanza

+0

這就是問題,我沒有它。 :( – user3115183

+0

然後沒有問題 – juanchopanza

回答

0

根據http://www.cplusplus.com/reference/bitset/bitset/bitset/

位集的構造函數在C++ 98承認無符號長。而不是C++ 11承認無符號long long。截斷也許?你沒有提到你使用的編譯器,所以你去...

+0

順便說一句,你檢查編譯器警告,以驗證上述? – Manex

+0

我正在使用GNU C++ 4.3.2,但這很多的答案我猜 – user3115183

+0

然後沒有C++ 11的支持你有沒有檢查構造函數的隱式轉換的警告? – Manex