代码之家  ›  专栏  ›  技术社区  ›  CocoCrisp

C语言中简单表达式的奇怪输出,为什么?

  •  4
  • CocoCrisp  · 技术社区  · 9 年前

    我正在使用TurboC++。我写了下面的表达式,但没有得到正确的评估,我是否遗漏了它背后的一些概念?

    int c=300*300/300;
    printf("%d",c);
    

    输出为

    81

    为什么?

    2 回复  |  直到 9 年前
        1
  •  27
  •   Sarima    9 年前
    300*300 is 90000.
    

    假设int为16位,则已溢出。

    溢出溢出,给您: 24464 .

    24465/300 = 81.55
    

    不要依赖于此。这是未定义的行为。

        2
  •  9
  •   Bathsheba    9 年前

    300*300/300的评估从左到右进行。

    300*300溢出16位有符号整型( int 在Turbo C++中为16位)。由于计算将在有符号算术中进行, 结果未定义 .

    正在发生的是300*300正在包装,给你24464。(24464+32768+32768=90000)。

    24464/300是整数除法中的81。