3

次のコードは警告をトリガーしgccます (gcc 4.2.1):

#include <boost/cstdint.hpp>
boost::uint64_t x = 1 << 32; // warning: left shift count >= width of type

型が64bitだからいいんじゃないの?

4

1 に答える 1

11

>= 32 ビットをシフトする方法はuint64_t?

コンパイラがサポートしている場合long long:

boost::uint64_t x = 1LL << 32;

さもないと:

boost::uint64_t x = boost::uint64_t(1) << 32;

型が64bitだからいいんじゃないの?

いいえx。64 ビットですが、そうで1はありません。1は 32 ビットです。結果をどのように使用しても、結果の生成方法には影響しません。

于 2013-02-13T04:50:08.033 に答える