我有以下代码:
void main()
{
int a=30,b=40,x;
x=(a!=10) && (b=50);
printf("x=%d",x);
}
结果我得到x=1
。在&&
运算符中,条件为true,只有当两者都为真时,第一个为真,即不等于10,但第二个是b=50
,这是错误的,那么x
的值也是1在外面。为什么会这样?
答案 0 :(得分:4)
在您的代码中,更改
... && (b=50);
到
... && (b == 50);
否则,分配之后的b
的值将被视为&&
运算符的第二个表达式。
答案 1 :(得分:4)
第二次比较实际上是一项任务。它应该是:
x=(a!=10) && (b==50);
答案 2 :(得分:2)
您正在使用赋值运算符=
而不是==
的等效性测试b
运算符。
修正代码清单
#include <stdio.h>
void main()
{
int a=30, b=40, x;
x = ((a!=10) && (b==50));
printf("x=%d",x);
}
将来阻止此操作的一个好策略是更换您的LVALUE
和RVALUE
,因此您的代码如下所示:
x = ((10 != a) && (50 == b));
如果您坚持上述风格,如果您将来犯同样的错误,最终会得到:
50 = b
哪会触发编译错误,因为您无法将变量RVALUE
分配给常量/文字LVALUE
。
答案 3 :(得分:0)
表达式(b=50)
具有逻辑值1
(true
),而不是0
(false
)。