include <stdio.h> int main(void){ printf("%lld",1.2e+21); return 0; } 输出的是4922508429807331632 我觉得1.2e+21不是E计数法表示1.2乘十的二十一次方吗?
一个问题是,long long类型的最大值为9223372036854775807,你给的数超出范围了。 另一个问题是,long long和double的编码方式是不一样的,不要把double用%lld输出,可以进行显式类型转换。 下面是一个对比例子: #include <stdio.h> int main() { // 200.000000 printf("%f\n", 2.0e2); // 1099511628032 printf("%lld\n", 2.0e2); // 200 printf("%lld\n", (long long)2.0e2); return 0; }
一个问题是,
long long
类型的最大值为9223372036854775807,你给的数超出范围了。另一个问题是,
long long
和double
的编码方式是不一样的,不要把double
用%lld
输出,可以进行显式类型转换。下面是一个对比例子: