从你的代码来看,就是求
1 + 2 + 4 + 8 + 16 + …… + 2的63次方
换成二进制表达,就是求
1 + 10 + 100 + 1000 + 10000
+ …… + 1000000000000000000000000000000000000000000000000000000000000000
结果当然就是二进制的
1111111111111111111111111111111111111111111111111111111111111111
换句话说,你使用的存储类型起码要能达到64bits。在C语言的标准内建类型中,只有unsigned long long能表示这么大的范围
此后,代码很简单,你使用符合C标准的编译器(若你使用TC、VC等不支持现代C标准的编译器我就和你没什么好说的了),比如gcc4.7.2(带上编译参数-std=c99)编译运行如下代码
程序代码:
#include <stdio.h>
int main()
{
unsigned long long sum = 0;
for( unsigned i=0; i<64; ++i )
sum += 1ull<<i;
printf( "%llu\n", sum );
return 0;
}
输出为: