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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王雪冬 中级黑马   /  2014-4-5 06:29  /  1615 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由  王雪冬 于 2014-4-5 12:22 编辑

请详细标注分析一下:为什么打印回来a的值是10不是11
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int m=10;

  5.         int n=(2>3) && (++m>5);

  6.         printf("a=%d\n",m);
  7.         
  8.         return 0;
  9. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
沙洲冷 来自手机 中级黑马 2014-4-5 08:14:21
沙发
赋值表达式int n=(2>3) && (++m>5);中,由于(2>3)不成立,所以 (++m>5)并没有执行,所以m还是原值:10。
回复 使用道具 举报
简单的说楼主你最后输出的是m,然后因为int n = (2>3)&&(++m>5),与运算符前面的(2>3)判断为假,后面的(++m>5)就不再判断,这是与运算符的特点,只要前一个为假,后面就不再判断,所以m并没有做自加运算。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
视屏开的不仔细哇,在&&运算符中,如果有一个不成立,返回就是0。如果前面不成立,后面的就不会执行。所以当(2>3)返回0时,后面就不执行了。||运算符也是,如果一个成立,返回值就为1,当前面的成立了,后面的就不执了。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int m=10;

  5.         int n=(2>3) && (++m>5); //先判断2>3是否成立,肯定不对,为0,由于是&&运算,只要有0就不会继续判断下面的运算了,所以m不会加1

  6.         printf("a=%d\n",m); //输出10

  7.         return 0;
  8. }
复制代码


ps:因为&&运算规则是:只要运算式中有一个0,就为false,那么第一个为0的话,后面的判断就不会进行了,因为已经知道结果了,0和任何数相与运算都是0

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int m=10; // 定义m的初始值为10
  5.    
  6.     int n=(2>3) && (++m>5); // (2>3)为假,并且为&&(即全真为真),所以后边不用判断,即该逻辑运算为假,也就是(++m>5)这个式子没有运算
  7.    
  8.     printf("a=%d\n",m);
  9.    
  10.     return 0;
  11. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马