逻辑运算符和增量运算符
Logical Operators and increment operators
谁能解释这段代码?如何将值分配给变量 m 但输出是针对所有变量变化的。还有逻辑运算符和增量运算符的作用在这里。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i || ++j && ++k;
printf("%d%d%d%d\n", i, j, k, m);
return 0;
}
||
或逻辑或运算符有一个 short-circuit property。它只评估了 RHS 是 LHS 是 FALSY。
在您的例子中,++x
的计算产生了 -2
的值,这不是 FALSY (0)。因此,RHS 永远不会被评估。
分解:
m = ++i || ++j && ++k;
>> m = (++i) || (++j && ++k);
>> m = (-2) || (++j && ++k);
>> m = 1 // -2 != 0
因此,只有 m
和 i
的值发生变化,其余变量将保留其值(因为它们未被评估)。
也就是说,逻辑或运算符的结果是 0
或 1
,一个整数值。结果存储在 m
中,在您的情况下。
谁能解释这段代码?如何将值分配给变量 m 但输出是针对所有变量变化的。还有逻辑运算符和增量运算符的作用在这里。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i || ++j && ++k;
printf("%d%d%d%d\n", i, j, k, m);
return 0;
}
||
或逻辑或运算符有一个 short-circuit property。它只评估了 RHS 是 LHS 是 FALSY。
在您的例子中,++x
的计算产生了 -2
的值,这不是 FALSY (0)。因此,RHS 永远不会被评估。
分解:
m = ++i || ++j && ++k;
>> m = (++i) || (++j && ++k);
>> m = (-2) || (++j && ++k);
>> m = 1 // -2 != 0
因此,只有 m
和 i
的值发生变化,其余变量将保留其值(因为它们未被评估)。
也就是说,逻辑或运算符的结果是 0
或 1
,一个整数值。结果存储在 m
中,在您的情况下。