变量z已被声明为long long unsigned int,因此范围是 0到18,446,744,073,709,551,615但是以下程序在一些迭代后无法计算所需的值。
#include<stdio.h>
int main()
{
long long unsigned int z=2;
int i;
for(i=0;i<40;i++)
{
printf("%d\n",z<<i);
}
return 0;
}
答案 0 :(得分:2)
问题在于您的printf
声明。
#include <iostream>
int main()
{
long long unsigned int z = 2;
int i;
for (i = 0; i<40; i++)
{
std::cout << (z << i) << "\n";
}
return 0;
}
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
2147483648
4294967296
8589934592
17179869184
34359738368
68719476736
137438953472
274877906944
549755813888
1099511627776
答案 1 :(得分:1)
尝试printf("%llu\n",z<<i);
答案 2 :(得分:0)
那是因为%d
用于打印int
,而不是更大的类型。
以下作品:
#include <iostream>
int main()
{
long long unsigned int z=2;
for (int i = 0; i < 40 ; i++)
{
std::cout << (z<<i) << "\n";
}
}
答案 3 :(得分:0)
您应该在"%lld\n"
格式字符串中使用printf
,而不是"%d\n"
。