C left shift on 64 bits fail
Because 1
is an int
, 32 bits, so (1 << 27)*27
overflows. Use 1ull
.
Regarding your comment, if x
is a uint64_t
, then 1 << x
is still an int
, but for the multiplication it would be cast to uint64_t
, so there'd be no overflow. However, if x >= 31
, 1 << x
would be undefined behaviour (as the resulting value cannot be represented by a signed 32 bit integer type).