定义long long int的数组

问题描述 投票:1回答:4

我正在尝试生成一个数组,该数组将从2 ^ 0到2 ^ 63保持2的幂。我为此使用unsigned long long int。但是,当我打印所有值时,它一直打印到2 ^ 30,然后才溢出。编译器是GNU GCC版本4.8.1。这是代码。

unsigned long long int a[65],i;
a[0]=1;
for(i=1;i<65;i++) {

   a[i]=2<<(i-1);
   printf("i=%d a[i]=%lld\n",i, a[i]);
}

这里是输出

i=1 a[i]=2
i=2 a[i]=4
i=3 a[i]=8
i=4 a[i]=16
i=5 a[i]=32
i=6 a[i]=64
i=7 a[i]=128
i=8 a[i]=256
i=9 a[i]=512
i=10 a[i]=1024
i=11 a[i]=2048
i=12 a[i]=4096
i=13 a[i]=8192
i=14 a[i]=16384
i=15 a[i]=32768
i=16 a[i]=65536
i=17 a[i]=131072
i=18 a[i]=262144
i=19 a[i]=524288
i=20 a[i]=1048576
i=21 a[i]=2097152
i=22 a[i]=4194304
i=23 a[i]=8388608
i=24 a[i]=16777216
i=25 a[i]=33554432
i=26 a[i]=67108864
i=27 a[i]=134217728
i=28 a[i]=268435456
i=29 a[i]=536870912
i=30 a[i]=1073741824
i=31 a[i]=-2147483648
i=32 a[i]=0
i=33 a[i]=2
i=34 a[i]=4
i=35 a[i]=8
i=36 a[i]=16
i=37 a[i]=32
i=38 a[i]=64
i=39 a[i]=128
i=40 a[i]=256
i=41 a[i]=512
i=42 a[i]=1024
i=43 a[i]=2048
i=44 a[i]=4096
i=45 a[i]=8192
i=46 a[i]=16384
i=47 a[i]=32768
i=48 a[i]=65536
i=49 a[i]=131072
i=50 a[i]=262144
i=51 a[i]=524288
i=52 a[i]=1048576
i=53 a[i]=2097152
i=54 a[i]=4194304
i=55 a[i]=8388608
i=56 a[i]=16777216
i=57 a[i]=33554432
i=58 a[i]=67108864
i=59 a[i]=134217728
i=60 a[i]=268435456
i=61 a[i]=536870912
i=62 a[i]=1073741824
i=63 a[i]=-2147483648
i=64 a[i]=0

我也尝试过使用int64_t,但结果相同。另外,如果我通常像[]

unsigned long long int lli = 9223372036854775807;

并打印其值,它正在工作。我要去哪里错了?

我正在尝试生成一个数组,该数组将从2 ^ 0到2 ^ 63保持2的幂。我为此使用unsigned long long int。但是当我打印所有值时,它一直打印到2 ^ 30,然后才是...

c++ c arrays long-integer
4个回答
4
投票

您的问题在此代码中:a[i] = 2 << (i-1);


3
投票

其他答案已经回答了您要问的问题,但是您的代码中还有其他问题。


2
投票
问题是此行:

0
投票
使用%llu扫描无符号的long long int,而不是您扫描时执行的%lld
© www.soinside.com 2019 - 2024. All rights reserved.