节省从一个64位长的数字

问题描述:

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

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

任何提示?谢谢。

+0

首先 - 指定语言和平台你的目标。当你放置数字字符(比如1

如果你只是想那么最显著31位:

所有的
start = (b >> 33) & 0x7ffffffeULL; 
+0

哦对,那工作:)谢谢! – user2199745