我有一个 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));
我收到一个错误:左移计数 >= 类型宽度
即使我将 63 更改为 62:
Primitive<uint64_t> start = (((b)>>(32)) & ((1<<(((62+1)-(32))))-1));
我得到:错误:表达式中的整数溢出
有小费吗?谢谢。