我不知道前后增量

时间:2017-02-02 03:17:21

标签: c increment operator-keyword post-increment

为什么结果12而不是13 所以我认为第一个k / j被评估为0 然后j-0变为7 然后5 + 7 = 12 然后在评估任何东西时结束12 ++ 所以答案应该是13但是它的12 如果有人可以解释,我真的很感激。

int i = 5,j = 7,k = 3;
    int result = i+++j-k/j;
    printf("%d",result);

3 个答案:

答案 0 :(得分:2)

您被运算符优先级和整数除法所困扰。下面这个表达式中的所有内容,间隔是可读的,都是使用整数数学完成的。

int result = i++ + j - k / j;

或者

int result = 5 + 7 - 3 / 7;

由于i++在之后i 进行了评估,因此i的计算结果为5,之后为6。

分区的优先级高于加法或减法,所以实际上就是这样:

int result = 5 + 7 - (3 / 7);

所有整数数学都会截断小数部分,因此3/7为0。

int result = 5 + 7 - 0;

有你的12岁。

这就是为什么最好避免依赖于在较大表达式中递增运算符的前置或后置性质,它们使表达式难以理解并且容易出错。可以单独使用它们作为i += 1的简写,如for( int i = 0; i < something; i++ ),或写i += 1

答案 1 :(得分:1)

int result = (i + j) - (k / j); i = i + 1;

匹配完成的实际操作。

答案 2 :(得分:0)

i+++j-k/j   ==  i++ + j - k/j

评估顺序

1) k/j = 0
3) i++ + j
   5++ + 7 = 12
3) (i+++j)-k/j
    12-0 = 12

现在 i 将增加到6

答案是12而不是13。

要获得13次尝试

++i+j-k/j;