我正在学习 C,我发现
++
运算符可能具有更高的演员优先级,但这对我来说很奇怪!
这是我的代码:
#include <stdio.h>
#define SUFF 18
#define PROM 1
#define BOCC 0
int main(int argc, char* argv[])
{
int v1, v2;
float ris1, tmp;
int ris2, ris3;
scanf("%d", &v1);
scanf("%d", &v2);
if (v1 >= SUFF && v2 >= SUFF)
ris3 = PROM;
else
ris3 = BOCC;
ris1 = ((float)v1 + v2) / 2;
tmp = ris1 - (int)ris1;
if (tmp >= 0.5)
ris2 = (int)ris1 + 1;
else
ris2 = (int)ris1;
printf("%d %d\n", ris2, ris3);
return 0;
}
我指的是这一行:
ris2 = (int)ris1 + 1;
输入:18 19 输出:19 1 正确!
如果我改成这样:
ris2 = (int)ris1++;
输出变为:18 1 不正确!
我期待两个代码的结果相同。
ris2 = (int)ris1++;
,(后增量 - 增量稍后发生)就像
ris2 = (int)ris1;
ris1++;
不像
ris2 = (int)ris1 + 1;
.
ris2 = (int)++ris1;
,(预增量)就像
ris1++;
ris2 = (int)ris1;
就像
ris2 = (int)ris1 + 1;
期望ris1
也递增。
(int)
演员表与问题无关。