如果我用计算的中间部分高于那个变量类型的界限的变量进行计算,是否有一些平台可能不喜欢的危险?使用一个变量超出其界限的变量C
这是在问什么,我一个例子:
int a, b;
a=30000;
b=(a*32000)/32767;
我编写这一点,它给的29297正确的答案(当然,内截断误差,反正)。但担心我的部分是30,000 * 32,000 = 960,000,000,这是一个30位的数字,因此无法存储在16位的int中。最终的结果完全在int的范围内,但我期望无论内存中的哪个工作部分都具有与最大源变量相同的大小,因此会发生溢出错误。
这只是一个小例子来显示我的问题,我试图避免使用浮点数,使分数为最大量能够存储在该变量中的一小部分(在这种情况下,一个有符号的整数,所以在积极的方面是32767),因为我使用的嵌入式系统我认为没有FPU。
那么大多数处理器如何处理来自源和目标变量边界的计算?
你的代码仍然假定'MAX_INT> = 960,000,000',这是提问者要求的一部分。 – 2010-03-25 22:59:53
@Steve Jessop。在这种情况下,我们需要找到具有该属性的int版本。 '无符号长'? – 2010-03-25 23:37:12
是的,'long'保证至少32位,所以'(a * 32000L)/ 32767'不会溢出,因为我们知道'a'是30000(或任何高达64M的东西)。 – 2010-03-26 01:54:43