自增运算符循环问题!跪求解释
#include<stdio.h>void main()
{
int a = -2 , b = 0;
while(a++ && ++b)
;
printf("%d,%d\n", a , b);
}
前面运算都正常 可当 a 自增到0 进入循环的时候为什么a 自增 1而b 不做处理啊 ?
输出的是a == 1,b == 2 ;为什么不是b == 3 ?
还有 如果把循环条件换成 while(a++ || ++b) 的 时候怎么 b 的值 在 a < 0 的时候会一直不做处理? 只有当 a = 0时 ,b 和 a 才会都自增 1 即 a== 1;b == 1然后进入死循环,b 在后面也不做处理 !
这是怎么回事啊 求各位大侠分析下, 谢谢
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1,整个式子就为1了,不需要再处理判定b了。
你的例子是加强自增和按位操作符理解的很好示例。 tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...
谢谢,受教了! tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...
请教大师,那之前进行 且 比较的时候为什么b会自增呢? tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...
知道了,之前b ==0 是么? 啃啃 发表于 2013-10-9 17:08 static/image/common/back.gif
请教大师,那之前进行 且 比较的时候为什么b会自增呢?
别带称呼,我也只是个初学者。
对于a&&b:
你前面比较的时候a都非0,为真,那还得接着看b,所以b会自增啊。
到了a为0,不管b是啥整个式子都为0了啊,就不需要看b了啊 tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...
也不对啊,那 b 的值应该一直是一才对吧? 不好意思,啰嗦了!在上班,思绪老被打断! tsembrace 发表于 2013-10-9 17:18
别带称呼,我也只是个初学者。
对于a&&b:
你前面比较的时候a都非0,为真,那还得接着看b,所以b会自增 ...
理解了,谢谢你! 理解能力太差了,唉... 啃啃 发表于 2013-10-9 17:10 static/image/common/back.gif
知道了,之前b ==0 是么?
int a = -2 , b = 0;
while(a++ && ++b)
第一步:先判断a=-2,非0为真,再a++,a=-1;再继续判断(++b),(++b)为1;则整个式子为真,继续循环
第二步:先判断a=-1,非0为真,再a++,a=0;再继续判断(++b),(++b)为2;则整个式子为真,继续循环
第一步:先判断a=0非真,再a++,a=1,对于&&,则不需要再判断后面的(++b),也就不执行(++b);整个式子为0,退出循环
按上,a=1,b=2 tsembrace 发表于 2013-10-9 17:24 static/image/common/back.gif
int a = -2 , b = 0;
while(a++ && ++b)
第一步:先判断a=-2,非0为真,再a++,a=-1;再继续判断(++b),(++ ...
{:5_106:}一步一步分析得很到位啦。
这个 && 运算是自左向右的。 学习一席哈
页:
[1]