使用大于 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;
如果我声明一个类型为 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;