C 表达式如何计算?
有人能画出表达式的优先级树吗?请解释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中的&和|
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
(atrue
值),不再计算表达式。C
短路中的&
和|
运算符。这意味着,如果其左侧的值足以确定总体值,则永远不会计算右侧
您的表达式被解析为
(++i)|(++j)&&&(++k))
|
短路,所以在计算了++i
之后,发现它的值是-2
(atrue
值),就不再计算表达式了。但是++比|优先级更高,所以我认为应该先计算++j shud,然后再计算其他的++运算符。优先级是关于解析,短路评估与执行有关。优先级决定表达式的解释方式,而执行规则决定代码的实际功能。但是++比| |具有更高的优先级,因此我认为应该首先与其他++运算符一起计算++j。优先级是关于解析,短路计算是关于执行。优先级决定表达式的解释方式,而执行规则决定代码的实际功能。
m= ++i || ++j && ++k;
↑