-3
int i = 2, j = 3, k, l ;
float a, b ;
k = i / j * j ;
l = j / i * i ;
a = i / j * j ;
b = j / i * i ;
printf( "%d %d %f %f", k, l, a, b ) ;
}

这是一个来自 yashwant kanetkar 的简单 c 程序,但我无法理解答案。如果我们编译这个程序,我得到的输出是

0 2 0.00000 2.00000

这是一个非常简单的程序,但我无法解释输出可能是我对关联性感到困惑。/ 和 * 都具有 L 到 R 的关联性,并且只有 / 具有明确的左操作数(L 到 R 关联性的必要条件),它是较早执行的。但在那种情况下答案是不同的。

4

1 回答 1

1

这是运算符的简单关联性,没有什么复杂的。

我认为这是让你感到困惑的“整数除法”属性。

  1. k = i / j * j ;答案为 0,因为先进行整数除法(i / j== 0)。
  2. l = j / i * i ;答案2,因为整数除法优先。( j / i== 1)
  3. a = i / j * j ;答案为 0,(提升为float),因为我之前提到过,首先是整数除法。
  4. b = j / i * i ;, 答案 2, (升级为float) 因为先进行整数除法,前面也提到过。

注意:哈克斯先生所说的温和版本:请避免提及那本书。

于 2015-06-29T14:59:26.777 回答