Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.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_Expression - Fatal编程技术网

C 表达式如何计算?

C 表达式如何计算?,c,expression,C,Expression,有人能画出表达式的优先级树吗?请解释C中表达式计算后的副作用..值 int i=-3, j=2, k=0, m; m= ++i || ++j&&++k; 根据我的说法,输出应该是-2 3 1 1,但我的gnu c编译器打印是-2 2 0 1? 我想知道怎么做?因为j不会被评估,因为: 在此阶段,m已计算为1,而与|的右侧无关。为什么? 因为1 | |任何都是1。因为j不会被评估,因为: 在此阶段,m已计算为1,而与|的右侧无关。为什么? 因为1 | |任何都是1。在C中的&和|

有人能画出表达式的优先级树吗?请解释C中表达式计算后的副作用..值

int i=-3, j=2, k=0, m;
m= ++i || ++j&&++k;
根据我的说法,输出应该是-2 3 1 1,但我的gnu c编译器打印是-2 2 0 1?
我想知道怎么做?

因为
j
不会被评估,因为:

在此阶段,
m
已计算为1,而与
|
的右侧无关。为什么?


因为
1 | |任何
都是1。

因为
j
不会被评估,因为:

在此阶段,
m
已计算为1,而与
|
的右侧无关。为什么?


因为
1 | |任何
都是1。

C
中的
&
|
运算符短路。这意味着,如果其左侧的值足以确定总体值,则永远不会计算右侧


您的表达式被解析为
(++i)|(++j)&&&(++k))
|
短路,因此在计算了
++i
后,发现其值为
-2
(a
true
值),不再计算表达式。

C
短路中的
&
|
运算符。这意味着,如果其左侧的值足以确定总体值,则永远不会计算右侧


您的表达式被解析为
(++i)|(++j)&&&(++k))
|
短路,所以在计算了
++i
之后,发现它的值是
-2
(a
true
值),就不再计算表达式了。

但是++比|优先级更高,所以我认为应该先计算++j shud,然后再计算其他的++运算符。优先级是关于解析,短路评估与执行有关。优先级决定表达式的解释方式,而执行规则决定代码的实际功能。但是++比| |具有更高的优先级,因此我认为应该首先与其他++运算符一起计算++j。优先级是关于解析,短路计算是关于执行。优先级决定表达式的解释方式,而执行规则决定代码的实际功能。
m= ++i || ++j && ++k;
    ↑