使用大于 31 的位移位初始化 uint64_t 会导致分配零

Initialising a uint64_t with bitwise shifts greater than 31 result in zero being assigned

如果我声明一个类型为 uint64_t 的变量并为其赋值 1 << 34,即将值左移 34 位,则结果变量设置为 0。任何 > 31 的移位都给出 0 和移位< 31 人工作正常。

我的赋值语句是:

uint64_t test34B = (uint64_t)1 << 34;

是否有我缺少的 Xcode 编译器设置?

在 32 位平台上,文字 1 将是 32 位,因此会出现编译器错误。

而是使用带有 ull 后缀的明确大小为 64 位的文字:

uint64_t n = 1ull << 34;