如何在uint64_t中移位> = 32位?

时间:2013-02-13 04:48:59

标签: c++ bit-manipulation

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

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

由于该类型有64位,所以不应该没问题吗?

1 个答案:

答案 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位。如何使用结果对结果的生成方式没有影响。