c中无符号long long的按位运算

时间:2014-10-31 22:29:50

标签: c bit-manipulation unsigned-long-long-int

我偶然发现了以下问题,有人可以帮忙吗? 我正在尝试使用按位运算,我希望这会打印2 ^ 50的值。然而,输出是0.我可以打印的最大值是2 ^ 31,这应该是普通int的最大值,对吧?我在这做一些非常错误的事情吗?提前谢谢。

#include<stdio.h>
#include<inttypes.h> 
int main(void)  
{
uint64_t x=(1<<50);
printf("%"PRIu64,x);
return 0;
}

1 个答案:

答案 0 :(得分:4)

你必须使你的常量为无符号长long类型,它保证至少64位大小:

uint64_t x=(1LLU<<50);