啃啃 发表于 2013-10-9 14:59:49

自增运算符循环问题!跪求解释

#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 在后面也不做处理   !

      这是怎么回事啊   求各位大侠分析下,   谢谢

tsembrace 发表于 2013-10-9 15:52:48

对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1,整个式子就为1了,不需要再处理判定b了。
你的例子是加强自增和按位操作符理解的很好示例。

啃啃 发表于 2013-10-9 16:34:33

tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...

谢谢,受教了!

啃啃 发表于 2013-10-9 17:08:05

tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...

请教大师,那之前进行   且 比较的时候为什么b会自增呢?

啃啃 发表于 2013-10-9 17:10:42

tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...

知道了,之前b ==0   是么?

tsembrace 发表于 2013-10-9 17:18:48

啃啃 发表于 2013-10-9 17:08 static/image/common/back.gif
请教大师,那之前进行   且 比较的时候为什么b会自增呢?

别带称呼,我也只是个初学者。
对于a&&b:
你前面比较的时候a都非0,为真,那还得接着看b,所以b会自增啊。
到了a为0,不管b是啥整个式子都为0了啊,就不需要看b了啊

啃啃 发表于 2013-10-9 17:19:50

tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...

也不对啊,那   b 的值应该一直是一才对吧?   不好意思,啰嗦了!在上班,思绪老被打断!

啃啃 发表于 2013-10-9 17:21:19

tsembrace 发表于 2013-10-9 17:18
别带称呼,我也只是个初学者。
对于a&&b:
你前面比较的时候a都非0,为真,那还得接着看b,所以b会自增 ...

理解了,谢谢你!   理解能力太差了,唉...

tsembrace 发表于 2013-10-9 17:24:55

啃啃 发表于 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

eleven_xxq 发表于 2013-10-10 10:03:44

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:}一步一步分析得很到位啦。

这个 && 运算是自左向右的。

magicyuc 发表于 2013-10-11 13:23:12

学习一席哈
页: [1]
查看完整版本: 自增运算符循环问题!跪求解释