C语言,赋值运算符的问题
#include<stdio.h>int main(void)
{
int a=1, b=0 ;
if ( a != 0 || b = 1)
printf("%d\n",b);
return 0;
}
编译时显示: lvalue required as left operand of assignment(中文翻译过来就是赋值运算符左边必须是可赋值的左值)
然后我尝试用括号把b=1括起来,就可以编译成功了。
想问一下有没有大佬是知道为什么 这个问题的确是优先级的问题。
a != 0 || b = 1会先判断 a != 0,然后得到结果0,再进行0||b,得到0,最后在进行赋值,而赋值运算符的左侧必须是变量,你这里赋值运算符左侧是定值0。
你应该是打算用比较运算符吧。
#include<stdio.h>
int main(void)
{
int a=1, b=0 ;
if ( a != 0 || b == 1)//比较运算符是两个等号,赋值运算符是一个等号
printf("%d\n",b);
return 0;
} 因为运算有优先级
不括起来的话,中间的 0||b会先执行,得到的结果是常数,不能被赋值 逻辑运先 b == 1
赋值 b = 1
该加()的时候加()也没有什么不对。
a != 0 || b = 1 肯定要加() 忘了说了,抱歉,刚刚查过C语言运算符优先级表,赋值运算符的优先级低于逻辑运算符,所以会按照逻辑运算符的顺序先执行。但也因为排除了这个优先级的原因,就完全想不出来其他原因了。 #include<stdio.h>
int main(void)
{
int a = 1, b = 0;
if (a || b )
printf("%d\n", b);
return 0;
}
我猜是你的思路有问题,我猜你内心想的是: a != 0 或者 b = 1,其中一个条件成立的时候为真,然而
|| 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B) 为真。 sunrise085 发表于 2020-3-21 15:37
这个问题的确是优先级的问题。
a != 0 || b = 1会先判断 a != 0,然后得到结果0,再进行0||b,得到0,最 ...
谢谢
页:
[1]