从64位长数字中保存特定位

时间:2013-06-24 14:12:43

标签: bit-manipulation

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

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

任何提示?感谢。

1 个答案:

答案 0 :(得分:0)

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

start = (b >> 33) & 0x7ffffffeULL;