3

以下代码触发gcc警告(gcc 4.2.1):

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

因为类型有 64 位,不应该没问题吗?

4

1 回答 1

11

如何将 >= 32 位移入uint64_t

如果您的编译器支持long long

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

除此以外:

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

因为类型有 64 位,不应该没问题吗?

不。即使x是 64 位,1也不是。1是 32 位。您使用结果的方式对该结果的生成方式没有影响。

于 2013-02-13T04:50:08.033 回答