main() {int m,n=10; m=2&&n++; printf("m=%d,n=%d\n",m,n); } 请问这个程序的运行结果为m=1,n=11

main(){intm,n=10;m=2&&n++;printf("m=%d,n=%d\n",m,n);}请问这个程序的运行结果为m=1,n=11如果把m=2&&n++变... main()
{int m,n=10; m=2&&n++;
printf("m=%d,n=%d\n",m,n); }
请问这个程序的运行结果为m=1,n=11 如果把m=2&&n++变成m=0&&n++结果为何变成m=0,n=10,n为何等于10呢?求赐教
展开
 我来答
situxuan333
2017-10-14 · TA获得超过831个赞
知道小有建树答主
回答量:328
采纳率:75%
帮助的人:67.6万
展开全部
因为 x&&y 中x、y中任意一个为0,整个表达式的值就为0的特性,

情况1:m=2&&n++。”&&“的优先级大于“=”,所以 m=(2&&n++)=(2&&10)=1,n自增为11。
情况2:m=0&&n++。因为 m=(0&&n++) ,无论“n++”是几,该表达式的值都会是0,所以程序不再处理“n++“,直接对m赋值0,n值不变,仍为10。
百度网友ad8bb83
2011-07-26 · TA获得超过4259个赞
知道大有可为答主
回答量:1469
采纳率:100%
帮助的人:1623万
展开全部
这个题目有2点需要注意:
1.逻辑运算符号优先级比赋值运算符优先级高,即m=2&&n++;实际上是m=(2&&n++);而逻辑运算的结果只有0和1,其中2和n++都是非0值,所以结果为1,n++得到11
2.&&也称为短路运算符,因为0&&任意值都=0,所以0&&后面的表达式会被系统省略运算以节约资源,即被短路,不会运算,保留原值
所以m=0&&n++的值为0,并且n值不会+1
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
greatoutdoor
2011-07-26 · TA获得超过166个赞
知道答主
回答量:89
采纳率:0%
帮助的人:95万
展开全部
m=2&&n++ 中(2&&n++)是一个逻辑运算的表达式
结果只会是0或1 如果m 和(n++)都不等于0 则为1
只要有一个为0 就为0 如果m=0 判断为假后就不会继续执行了 n++没做
n++就是n+1,于是结果就会出现上面的现象了
需要说明的是(n++)其实表示的值就是n
因为这个语句是先赋值再加一的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ef71dfe91
2011-07-26
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
因为m=2&&n++是一个逻辑判断 ,由于M=2是为真 在执行n++而m=0&&n++时,m=0时为假 不执行后面的n++
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huangzhilong52
2011-07-26 · TA获得超过384个赞
知道小有建树答主
回答量:622
采纳率:0%
帮助的人:338万
展开全部
m=2&&n++时,m="非0"并"非0"="非0"(1),n++
m=0&&n++时,m="0"时这句话已结束,不再向后面执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式