0
int i = 5, j = 10, k = 1;  
printf("%d\n", k > i < j);

为什么打印出1?

4

3 回答 3

2

希望它什么都不会打印,因为这应该是非法的。但是,如果我们绝对必须这样做:

k > i < j将分为两部分:k > i,然后将其结果与 进行比较j。像这样比较的结果是 1 iftrue或 0 if false。因为k > ifalse,我们得到 0;那么我们0 < j得到true1。因此,这将打印 1。

于 2012-11-10T03:55:09.417 回答
1

首先,您需要弄清楚评估操作的顺序。使用此表中的关联性列寻求帮助。接下来,弄清楚 的值是多少k > iprintf用来试一试。最后,算出最后一个表达式的值,运行程序看看你的答案是否正确。

于 2012-11-10T03:54:25.987 回答
1

k > i < j是一个表达式,在printf被调用之前它会被完全计算;一切printf都会看到的是评估的结果。至于它的评估结果,运算符只是从右到左单独评估;sok > i将首先被评估,然后是应用于右侧<的结果。j

请注意,如果我们有除<and以外的运算符,这可能会有所不同>;这些恰好具有相同的优先级,因此它们总是从左到右进行评估。另一方面,如果我们有k + i * j,i * j将首先被评估。这是因为*具有比 更高的优先级+

于 2012-11-10T03:54:34.017 回答