理解C语言中的算子
我对操作员的一个基本问题感到震惊。问题就在这里理解C语言中的算子,c,operators,C,Operators,我对操作员的一个基本问题感到震惊。问题就在这里 int i=3, j=2, k=1, m; m = ++i || ++j && ++k; printf("%d %d %d %d", i, j, k, m); 在我进行这项工作时,我将ans评估为 4 3 2 1 但是C对我的ans不满意,并将上面的评估为 4 2 1 1 但是我不明白怎么做。为什么++j不更新j的值。而且,++k不会更新k的值。 这里的任何人都请解释一下它是如何工作的。在C中,|是一个。这意味着在计算表达式a
int i=3, j=2, k=1, m;
m = ++i || ++j && ++k;
printf("%d %d %d %d", i, j, k, m);
在我进行这项工作时,我将ans评估为
4 3 2 1
但是C对我的ans不满意,并将上面的评估为
4 2 1 1
但是我不明白怎么做。为什么++j不更新j的值。而且,++k不会更新k的值。这里的任何人都请解释一下它是如何工作的。在C中,
|
是一个。这意味着在计算表达式a | | b
时,只有当a
为false时,它才会计算b
。如果a
为true,则无论b
如何,表达式都将始终为true
由于++i
给出了一个真实值,++j&&++k
将不会被计算
m = ++i || ++j && ++k;
&&
运算符的优先级高于|
,因此这相当于:
m = ++i || (++j && ++k);
&&
和|
都是短路操作员;如果左操作数确定结果,则不计算右操作数。由于++i
(产生4
)是“真实的”,因此不计算右操作数(++j&&++k)
,并且j
和k
不会递增。因此,i
变为4
,j
和k
分别保留其2
和1
的初始值
|
运算符的结果为0
(表示false)或1
(表示true);由于条件为真,值1
被分配给m
结果:
4 2 1 1
此外,由于“true”是“1”,因此值
1
被分配给变量m
。这是正确答案谢谢。。所以我现在明白了它的工作原理。实际问题是操作人员短路。