GCC和TC提供不同的产出?

sas*_*har 3 c gcc

请考虑以下代码:

#include <stdio.h>

int main()
{
        printf("%d", 300 * 300 / 300);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

MBy*_*ByD 6

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

由于*/具有相同的优先级,因此*首先评估(因为评估是从左到右)

但是,你可以做任何一个300 * (300/300)300L * 300 / 300

  • gcc对int使用4个字节.计算300*300没有过载. (3认同)