sen*_*ack 2 c c++ variable-assignment
main( ) {
int i = 4, j = -1, k = 0, w, x, y, z ;
w = i || j || k ;
x = i && j && k ;
y = i || j && k ;
z = i && j || k ;
printf ( "\nw = %d x = %d y = %d z = %d", w, x, y, z ) ;
}
Run Code Online (Sandbox Code Playgroud)
我只是学习C而且我遇到了这段代码.老实说,我不知道w,x,y和z分配给了什么.显然输出如下:
w = 1 x = 0 y = 1 z = 1
Run Code Online (Sandbox Code Playgroud)
'w'如何等于1?我不懂.
sim*_*onc 11
||是逻辑OR运算符.来自C11 s6.5.14逻辑OR运算符
|| 如果操作数的任何一个比较不等于0,则运算符应该为1; 否则,它产生0.结果类型为int.
...... || 运营商保证从左到右的评估;
将此应用于w我们得到的计算
w = i || j || k == (i || j) || k
== (non-zero || non-zero) || 0
== 1 || 0
== 1
Run Code Online (Sandbox Code Playgroud)
用于计算x,y,z是相似的.C11 s6.5.13.3规定&&运算符的结果应为0或1.
在C中,布尔值没有"强"内置类型,因此使用整数.评估逻辑表达式的结果(例如使用||和的逻辑表达式)&&可以分配给整数变量.
当在逻辑运算符中使用值时,布尔解释非常简单:零被解释为false,而所有非零值都被解释为true.
现在你应该能够自己找出表达式:
i || j || k评估为1,因为i并且j不是零i && j && k评估为0,因为k是零,这在概念上是如何工作的:
w = i || j || K表;
w = 4 || -1 || 0; //值已替换
w = 真|| 0; // 4 || -1计算结果为true
w =(真); // true被分配给整数
w = 1; // 0为假,1为真