#include<stdio.h> int main() { unsigned long long i=2; int n=1; while(n<=63) { printf("%lld\n",i); i=(i*2); n++; } return 0; }我调整了一下为啥还是显示负号
时间: 2024-01-28 19:03:09 浏览: 81
这个问题可能是因为数据类型的范围不够,导致整数溢出。在你的代码中,你使用了 unsigned long long 类型来存储变量 i,这个数据类型的范围是 0 到 18,446,744,073,709,551,615,因此在理论上,你的程序应该可以输出 2 的 63 次方,而不会出现负号。
但是,如果你的程序还是输出了负号,有可能是因为使用了错误的格式化字符串来输出 i 变量。在 printf 函数中,如果你使用了 %d 这样的格式化字符串来输出 unsigned long long 类型的变量,会导致错误的输出结果。正确的格式化字符串应该是 %llu。
因此,你可以尝试修改代码中的 printf 语句,将 %lld 改为 %llu,看看能否解决这个问题。
相关问题
#include<stdio.h> int main() { unsigned long long i=2; char n=1; while(n<=63) { printf("%llu\n",i); i=(i*2); n++; } return 0; }这段代码的输出结果
这段代码会输出从2的1次方到2的63次方的所有整数,每个数占一行,输出结果如下:
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
2199023255552
4398046511104
8796093022208
17592186044416
35184372088832
70368744177664
140737488355328
281474976710656
562949953421312
1125899906842624
2251799813685248
4503599627370496
9007199254740992
18014398509481984
36028797018963968
72057594037927936
144115188075855872
288230376151711744
576460752303423488
1152921504606846976
2305843009213693952
4611686018427387904
9223372036854775808
#include<stdio.h> int main() { long long i=2; long long n=1; while(n<=63) { printf("%lld\n",i); i=(i*2); n++; } return 0; }为啥我这个代码输出二的63次方的时候带个负号
这是因为你使用的是 long long 类型,而 long long 类型的范围是 -2^63 到 2^63-1,当 i 的值达到 2^63 时,超出了 long long 类型的正数范围,因此会出现负数。如果想要避免这种情况,可以使用 unsigned long long 类型,它的范围是 0 到 2^64-1,可以表示更大的正整数。
阅读全文