简体   繁体   中英

How to shift >= 32 bits in uint64_t?

The following code triggers a gcc warning (gcc 4.2.1):

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

Shouldn't it be fine since the type has 64 bits?

How to shift >= 32 bits in uint64_t ?

If your compiler supports long long :

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

Otherwise:

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

Shouldn't it be fine since the type has 64 bits?

No. Even though x is 64 bits, 1 isn't. 1 is 32 bits. How you use a result has no effect on how that result is generated.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM