Objective c 在按位移位大于31的情况下初始化uint64_t会导致分配零

Objective c 在按位移位大于31的情况下初始化uint64_t会导致分配零,objective-c,integer,bit-shift,literals,Objective C,Integer,Bit Shift,Literals,如果我声明一个uint64_t类型的变量并将其赋值,那么值1 31等于0,移位

如果我声明一个uint64_t类型的变量并将其赋值,那么值1 31等于0,移位<31就可以了

我的派遣声明如下:


uint64_t test34B=(uint64_t)1在32位平台上,文本
1
将是32位的,因此编译器错误

相反,使用
ull
后缀,使用显式大小为64位的文本:

uint64_t n = 1ull << 34;

uint64\u t n=1ll怎么样
1ll啊,找到问题了!我的代码是:uint64\u t test34B=1警告只是问题的开始!赋值后的值为零!最多31次的移位可以正常工作,但大于32会导致test34B为零!抱歉,特洛伊敌人-我已将问题更新为一个稍有不同的问题,因为警告只是问题的开始-我现在已将原始问题更新为真实问题。特洛伊敌人的答案仍然可以解决您的问题,@JayJay。@JayJay我的答案不包含任何铸造。@JayJay我不明白这怎么可能。@特洛伊敌人道歉,我的以二进制形式输出值的测试例程中有一个bug,正在分配正确的值。