以下代码触发gcc
警告(gcc 4.2.1):
#include <boost/cstdint.hpp>
boost::uint64_t x = 1 << 32; // warning: left shift count >= width of type
由于该类型有64位,所以不应该没问题吗?
答案 0 :(得分:11)
如何移动&gt; =
uint64_t
中的32位?
如果您的编译器支持long long
:
boost::uint64_t x = 1LL << 32;
否则:
boost::uint64_t x = boost::uint64_t(1) << 32;
由于该类型有64位,所以不应该没问题吗?
没有。即使x
是64位,1
也不是。 1
是32位。如何使用结果对结果的生成方式没有影响。