2013-08-02 87 views
2

我想操縱64位。我用的是數量的無符號存儲長長int.To測試,我跑了下面的程序如何操縱64位?

#include <iostream> 

using namespace std; 

int main() 
{ 
unsigned long long x = 1; 
int cnt = 0; 
for(int i =0 ;i<64;++i) 
{ 
    if((1<<i)&x) 
    ++cnt; 
} 
cout<<cnt; 
} 

的porcess但CNT的輸出爲2,這顯然是錯誤的。我如何操縱64位?更正在哪裏?其實我試圖找到一致性,也就是二進制表示的數字小於2^63。

回答

4

的條件是64位,你應該使用64位1.所以,試試這個:

if(((unsigned long long) 1<<i)&x) 
+4

或者簡單的'1LLU'。 – Shahbaz

+0

是的,你是對的,這是更簡單和可讀性。 –

+0

更好:使用強制類型轉換爲'uint64_t',實際上它確保是64位。 'unsigned long long'可以是大於8位的任何值,包括16或32位。 – cmaster

0

在你的情況下操縱是什麼意思?我想你會測試變量x的每一位。你的X應該包含最大值,因爲你要測試你的變量x的每一位

int main() 
{ 
unsigned long long x = 0xFFFFFFFFFFFFFFFF; 
int cnt = 0; 
for(int i =0 ;i<64;++i) 
{ 
    if((1<<i)&x) 
    ++cnt; 
} 
cout<<cnt; 
} 
+0

其實我試圖找到平價,那是nu 1的數字小於2^63的二進制表示。 –

2

(1<<i)會溢出時i大於32

您可以編寫(x >> i) & 1