鱼C论坛

 找回密码
 立即注册
查看: 818|回复: 6

[已解决]C语言,赋值运算符的问题

[复制链接]
发表于 2020-3-21 15:37:40 | 显示全部楼层 |阅读模式
10鱼币
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.         int a=1, b=0 ;
  5.         if ( a != 0 || b = 1)
  6.            printf("%d\n",b);
  7.         return 0;
  8. }
复制代码


编译时显示:        [Error] lvalue required as left operand of assignment(中文翻译过来就是赋值运算符左边必须是可赋值的左值)

然后我尝试用括号把b=1括起来,就可以编译成功了。

想问一下有没有大佬是知道为什么
最佳答案
2020-3-21 15:37:41
这个问题的确是优先级的问题。
a != 0 || b = 1  会先判断 a != 0,然后得到结果0,再进行0||b,得到0,最后在进行赋值,而赋值运算符的左侧必须是变量,你这里赋值运算符左侧是定值0。
你应该是打算用比较运算符吧。
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.         int a=1, b=0 ;
  5.         if ( a != 0 || b == 1)//比较运算符是两个等号,赋值运算符是一个等号
  6.            printf("%d\n",b);
  7.         return 0;
  8. }
复制代码

最佳答案

查看完整内容

这个问题的确是优先级的问题。 a != 0 || b = 1 会先判断 a != 0,然后得到结果0,再进行0||b,得到0,最后在进行赋值,而赋值运算符的左侧必须是变量,你这里赋值运算符左侧是定值0。 你应该是打算用比较运算符吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 15:37:41 | 显示全部楼层    本楼为最佳答案   
这个问题的确是优先级的问题。
a != 0 || b = 1  会先判断 a != 0,然后得到结果0,再进行0||b,得到0,最后在进行赋值,而赋值运算符的左侧必须是变量,你这里赋值运算符左侧是定值0。
你应该是打算用比较运算符吧。
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.         int a=1, b=0 ;
  5.         if ( a != 0 || b == 1)//比较运算符是两个等号,赋值运算符是一个等号
  6.            printf("%d\n",b);
  7.         return 0;
  8. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 15:45:51 | 显示全部楼层
因为运算有优先级
不括起来的话,中间的 0||b会先执行,得到的结果是常数,不能被赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 15:46:40 | 显示全部楼层
逻辑运先 b == 1
赋值 b = 1

该加()的时候加()也没有什么不对。
a != 0 || b = 1 肯定要加()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 15:49:45 | 显示全部楼层
忘了说了,抱歉,刚刚查过C语言运算符优先级表,赋值运算符的优先级低于逻辑运算符,所以会按照逻辑运算符的顺序先执行。但也因为排除了这个优先级的原因,就完全想不出来其他原因了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 16:03:41 | 显示全部楼层
#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) 为真。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 16:18:59 | 显示全部楼层
sunrise085 发表于 2020-3-21 15:37
这个问题的确是优先级的问题。
a != 0 || b = 1  会先判断 a != 0,然后得到结果0,再进行0||b,得到0,最 ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 23:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表