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));
我得到:錯誤:表達式中的整數溢出
任何提示?謝謝。
首先 - 指定語言和平臺你的目標。當你放置數字字符(比如1 << 4)時,大多數編譯器會默認將其解釋爲整數 - 而你需要它們是uint64_t - 所以根據語言,它會像((uint64_t)1)<< 4 。 –