A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© S捭K阖Y 中级黑马   /  2014-5-20 23:00  /  1557 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a=b=c=d=0
    d=++a||++b&&++c
为什么a=1,d=1其余都是0,不是&&的优先级高于||吗?

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

7 个回复

正序浏览
大龄产妇 发表于 2014-5-21 01:21
不说别的,先上代码。

++ 的优先级,高于 || 运算符

十分感谢
回复 使用道具 举报
不说别的,先上代码。
  1.     a=b=c=d=0;
  2.     d=++a||(++b&&++c);
  3.     printf("a = %d,b = %d,c = %d,d = %d\n",a,b,c,d);
  4.     d=(++b&&++c)||++a;
复制代码

++ 的优先级,高于 || 运算符
因此,过程是最先计算了++a,a = 1,为真。
当“ || ”运算无论左右两边有一方为真时,运算结束。
楼主明白了吧!

点评

两次运算结果一样,漏了这一句  发表于 2014-5-21 01:22

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1 加油

查看全部评分

回复 使用道具 举报
这三个运算符是有优先级的,但是在特殊情况下还不是按其优先级来算的,比如你提问的这个是典型的例子,会出现短路现象,所谓短路现象就是使用逻辑运算符时候,当前面的逻辑运算结果已经能够决定整个运算条件的真假时就停止运算,后面的逻辑式都没有进行运算,所以当++a运算完之后后面的逻辑式就不会运算了

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1 正解

查看全部评分

回复 使用道具 举报
int a=b=c=d=0
    d=++a||++b&&++c
先算++a过后a=1,赋值给d,d=1,||特点:左边为1  结果一定为1(真)右边不参与运算 保持原值

“&&比||的优先级高“ 我理解为  在 a||b&&c情况下,是先运算b&&c ,再 a||(b&&c)

点评

看快了 赋值是最后的 迷糊了哈  发表于 2014-5-21 07:54
赋值运算的优先级是最低的,++a过后,并没有先把a的值赋值给d,亲,下次加油!  发表于 2014-5-21 05:53
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马