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关联性的必要条件)它更早地执行。但在这种情况下答案是不同的。
答案 0 :(得分:1)
这是simple associativity of the operators,没什么复杂的。
我认为"integer division"属性让你感到困惑。
k = i / j * j ;
回答0,因为首先是整数除法(i / j
== 0)。l = j / i * i ;
回答2,因为首先是整数除法。 (j / i
== 1)a = i / j * j ;
回答0,(提升为float
)因为我先前提到过整数除法。b = j / i * i ;
,回答2,(提升为float
),因为首先是整数除法,alo先前提到过。注意:A gentle version of what Mr. Haccks said:请避免提及该特定图书。