2013-06-24 22 views
0

特定位我有一個64位的uint64_t中號:節省從一個64位長的數字

Primitive<uint64_t> b = 0xCCCCCCCC00000000; 

我需要保存第31位(最重要的)位 - 7FFFFFFE。

我發現在互聯網這個解決方案:

start = (((b)>>(first)) & ((1<<(((last+1)-(first))))-1)); 

,但在我的情況下,此代碼:

Primitive<uint64_t> start = (((b)>>(32)) & ((1<<(((63+1)-(32))))-1)); 

我得到一個錯誤:類型的左移計數> =寬度

即使我將63改爲62:

Primitive<uint64_t> start = (((b)>>(32)) & ((1<<(((62+1)-(32))))-1)); 

我得到:錯誤:表達式中的整數溢出

任何提示?謝謝。

+0

首先 - 指定語言和平臺你的目標。當你放置數字字符(比如1 << 4)時,大多數編譯器會默認將其解釋爲整數 - 而你需要它們是uint64_t - 所以根據語言,它會像((uint64_t)1)<< 4 。 –

回答

0

如果你只是想那麼最顯著31位:

所有的
start = (b >> 33) & 0x7ffffffeULL; 
+0

哦對,那工作:)謝謝! – user2199745