我有一个64位的uint64_t号码:
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));
我收到错误:左移计数&gt; =类型宽度
即使我将63改为62:
Primitive<uint64_t> start = (((b)>>(32)) & ((1<<(((62+1)-(32))))-1));
我得到:错误:表达式中的整数溢出
任何提示?感谢。
答案 0 :(得分:0)
如果您只想要最重要的31位,那么:
start = (b >> 33) & 0x7ffffffeULL;