Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解C语言中的算子_C_Operators - Fatal编程技术网

理解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
。这是正确答案谢谢。。所以我现在明白了它的工作原理。实际问题是操作人员短路。