C 为什么输入if语句后1是变量var的值?

C 为什么输入if语句后1是变量var的值?,c,comparison,logical-operators,C,Comparison,Logical Operators,在这里您可以看到清单,我知道它是if语句中的赋值,而不是比较。所以请不要建议你更了解它。我只是想知道为什么在if语句中赋值之后,var的值是1 int var = 0; if(var = -5 || 5) { // Value of var is 1, but why? Shouldn´t it be -5 or 5? printf("%d", var); } 在C(x | | y)中,是一个布尔表达式——一个结果总是true(1)或false(0)的表达式。 这同样适用于&&

在这里您可以看到清单,我知道它是if语句中的赋值,而不是比较。所以请不要建议你更了解它。我只是想知道为什么在if语句中赋值之后,var的值是1

int var = 0;
if(var = -5 || 5)
{
    // Value of var is 1, but why? Shouldn´t it be -5 or 5?
    printf("%d", var);
}
在C
(x | | y)
中,是一个布尔表达式——一个结果总是true(1)或false(0)的表达式。 这同样适用于
&&
(和)和
(不是)

而且,
if(x=y)
if(y)
相同,其副作用是将y指定给x。即:

评估:

if (var = -5 || 5)  ...
是吗

还是

它是第二个,因为| |具有更高的优先级:

因为:

(-5 || 5) ---> 1
。。。 我们现在有

if (var = 1)  ...
1被分配给var(
=
是分配,
=
是值相等) 因为在C中,语句
a=b
也是一个表达式,它的新值是新值如果a,我们现在有:

if (var) ...

。。。因为测试是真的,因为
var
1
,而非零整数在C中是真的。

如果添加大括号,它更有意义:
var=(-5 | 5)
你是说
=
?你的意思是如果(var==5 | | var==5)
?代码中必须有比计算
-5 | | 5
更高的目的,两个操作数都是
真的。
“不应该是-5或5”表明它们确实需要赋值。@Carcigenicate您的意思是不是?新的程序员经常犯这样的错误,试图制造多个
条件。这看起来像是“我希望我能这样写,得到这样那样的结果。但看起来我不能。为什么?”问题。相反,请学习C语法及其功能,然后使用它来实现所需的结果。C语言不是一种可以通过实验学习的语言。
if (var = 1)  ...
if (var) ...