0

我有一个 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));

我得到:错误:表达式中的整数溢出

有小费吗?谢谢。

4

1 回答 1

0

如果您只想要最重要的 31 位,那么:

start = (b >> 33) & 0x7ffffffeULL;
于 2013-06-24T14:18:59.663 回答