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 に答える