GCC和TC提供不同的产出?

时间:2011-08-18 11:31:02

标签: c gcc

请考虑以下代码:

#include <stdio.h>

int main()
{
        printf("%d", 300 * 300 / 300);
        return 0;
}

当在标准GCC编译器上运行时,此代码将结果显示为300,但是当我使用Turbo C运行它时,结果为81。为什么会这样? 我知道TC使用2个字节来存储整数,结果300 * 300显然会超过这个限制,但是在打印之前它再次被300分为右边? 另外先计算什么? 300 / 300300 * 300?) 这种行为的原因是什么?

2 个答案:

答案 0 :(得分:6)

在打印之前它将它除以300,但溢出已经发生,因为整数文字被评估为int s,当你除以时,你已经使用溢出的int结果。

由于*/具有相同的优先级,因此首先评估*since evaluation is left to right

但是,您可以执行300 * (300/300)300L * 300 / 300

答案 1 :(得分:2)

在Turbo C中,int是16位宽。 300 * 300 = 90000 = 15F90h 15F90h将被截断为5F90h = 24464。如果您将24464300分开,则会得到81

在GCC int中通常是32位(不确定DOS中的GCC,以及其他异国/过时的平台)。 32位足以容纳90000