黑马程序员技术交流社区
标题:
一个运算符的运算问题
[打印本页]
作者:
王雪冬
时间:
2014-4-5 06:29
标题:
一个运算符的运算问题
本帖最后由 王雪冬 于 2014-4-5 12:22 编辑
请详细标注分析一下:为什么打印回来a的值是10不是11
#include<stdio.h>
int main()
{
int m=10;
int n=(2>3) && (++m>5);
printf("a=%d\n",m);
return 0;
}
复制代码
作者:
沙洲冷
时间:
2014-4-5 08:14
赋值表达式int n=(2>3) && (++m>5);中,由于(2>3)不成立,所以 (++m>5)并没有执行,所以m还是原值:10。
作者:
那个Mr_Z
时间:
2014-4-5 08:18
简单的说楼主你最后输出的是m,然后因为int n = (2>3)&&(++m>5),与运算符前面的(2>3)判断为假,后面的(++m>5)就不再判断,这是与运算符的特点,只要前一个为假,后面就不再判断,所以m并没有做自加运算。
作者:
一只小菜鸟
时间:
2014-4-5 08:21
视屏开的不仔细哇,在&&运算符中,如果有一个不成立,返回就是0。如果前面不成立,后面的就不会执行。所以当(2>3)返回0时,后面就不执行了。||运算符也是,如果一个成立,返回值就为1,当前面的成立了,后面的就不执了。
作者:
程浩
时间:
2014-4-5 08:30
#include<stdio.h>
int main()
{
int m=10;
int n=(2>3) && (++m>5); //先判断2>3是否成立,肯定不对,为0,由于是&&运算,只要有0就不会继续判断下面的运算了,所以m不会加1
printf("a=%d\n",m); //输出10
return 0;
}
复制代码
ps:因为&&运算规则是:只要运算式中有一个0,就为false,那么第一个为0的话,后面的判断就不会进行了,因为已经知道结果了,0和任何数相与运算都是0
作者:
haohaoxuexi
时间:
2014-4-5 08:53
#include<stdio.h>
int main()
{
int m=10; // 定义m的初始值为10
int n=(2>3) && (++m>5); // (2>3)为假,并且为&&(即全真为真),所以后边不用判断,即该逻辑运算为假,也就是(++m>5)这个式子没有运算
printf("a=%d\n",m);
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2