0
A
回答
1
霍尔特的answer是正确的,我只是离开这里作为注意!
你可以尝试使用:
long long int
,而不是
long int
然而,在我的本地机器,它没有任何效果:
#include <stdio.h>
int main(void)
{
long int k=(long int)(2000*2000*2000);
printf("With long int, I am getting: %ld\n", k);
long long int n = 2000*2000*2000;
printf("With long long int, I am getting: %lld\n", n);
return 0;
}
输出:
With long int, I am getting: -589934592
With long long int, I am getting: -589934592
警告:
../main.c:6:36: warning: integer overflow in expression [-Woverflow]
long int k=(long int)(2000*2000*2000);
^
../main.c:9:32: warning: integer overflow in expression [-Woverflow]
long long int n = 2000*2000*2000;
即使是这样:
unsigned long long int n = 2000*2000*2000;
printf("With long long int, I am getting: %llu\n", n);
会溢出了。
1
有在你的代码的两个问题:
long int
是(在大多数架构)没有足够的存储8e9
。- 当你这样做
2000 * 2000 * 2000
,操作使用由“简单”int
,因此,int * int * int = int
所以你把结果给int
,然后到long int
。
您需要使用long long int
,并指定要long long int
:
long long int k = 2000LL*2000LL*2000LL;
通知2000
后的额外LL
说: “这是2000年,但作为一个long long int
!”。
2
2000
是int
类型,所以2000*2000*2000
也是int
类型。
假设32位int
(这是比标准需要实际上更大,因为一个int
不需要由标准来表示的值超过32767
)的最大可表示值约为2,147,483,647
(插入可读性逗号)这小于8,000,000,000
。
你可能会想要做的测算为2000LL*2000*2000
其利用乘法被左右关联,做乘法之前,将促进所有2000
值long long int
。如果您希望保证能够存储结果,您的变量也需要是long long int
类型。
3
如果C整数常量适合于int
,则其类型为int
。所以,你的表达被评价为:
long int k = (long int)((int)2000*(int)2000*(int)2000);
如果int
是不是大到足以容纳相乘的结果,你会得到一个有符号整数溢出和不确定的行为。所以,如果long
大到足以容纳结果,你应该写:
long k = 2000L * 2000L * 2000L;
的L
后缀强制字面来long
类型(long
相当于long int
)。
但在大多数平台上,甚至long
仅仅是一个32位的,所以你必须使用long long
这是保证至少有64位:
long long k = 2000LL * 2000LL * 2000LL;
的LL
后缀力的类型字面值为long long
。
0
您不能仅将这些值一起乘以普通精度整数,然后将结果转换为更高的精度,因为结果已经在该点溢出。相反,操作数在乘以之前需要更高精度的整数。请尝试以下操作:
#include <stdio.h>
int main(void)
{
long long int n = (long long int)2000*(long long int)2000*(long long int)2000;
printf("long long int operands: %lld\n", n);
return 0;
}
在我的机器,这给:
long long int operands: 8000000000
相关问题
- 1. flash:Math.pow计算大数的错误答案
- 2. Java:计算返回错误的答案?
- 3. 数学计算使用C++,错误的答案
- 4. C中的因子计算导致错误答案
- 5. 正确和错误的答案计数
- 6. 计算长期使用双回路的功率给出错误的答案在C中的C代码
- 7. 错误答案从用C
- 8. 如何计算用户输入错误答案的次数(Python)
- 9. 使用提示中的答案进行计算
- 10. 添加长双打给出了C中的错误的答案++
- 11. 错误答案
- 12. flex-bison计算器程序中的错误答案
- 13. 为什么涉及指数的C计算会产生错误的答案?
- 14. 计算答案天mySQL
- 15. 用长整数长计算错误
- 16. 计数数组长度,答案是错的
- 17. 运算符超载的错误答案
- 18. 需要帮助计算答案,在C++小数
- 19. 函数不显示计算的答案
- 20. Java:计算给出错误的答案,我的错误在哪里?
- 21. 欧拉计划错误的答案
- 22. Fwrite错误答案
- 23. 在C++计算中无法获得正确答案
- 24. Python中的错误答案
- 25. 错误答案()在MATLAB
- 26. 计算系统错误率百分比答案
- 27. 选择并计算SQL,但答案错误
- 28. bcmath时似乎给出了错误的答案,我计算
- 29. 正确的计算器与错误的答案
- 30. 时间到计算器给出错误的答案
长整型是不足以容纳2000 * 2000 * 2000。使用long long int。 – Mukit09
你的概念.... –
那么,2000 * 2000 * 2000有多大? – qwr