鱼C论坛

 找回密码
 立即注册
查看: 4167|回复: 10

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

[复制链接]
发表于 2013-10-9 14:59:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-9 15:52:48 | 显示全部楼层
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1,整个式子就为1了,不需要再处理判定b了。
你的例子是加强自增和按位操作符理解的很好示例。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-9 16:34:33 From FishC Mobile | 显示全部楼层
tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...

谢谢,受教了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-9 17:08:05 From FishC Mobile | 显示全部楼层
tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...

请教大师,那之前进行   且 比较的时候为什么  b  会自增呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-9 17:10:42 From FishC Mobile | 显示全部楼层
tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...

知道了,之前  b ==  0   是么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-9 17:18:48 | 显示全部楼层

别带称呼,我也只是个初学者。
对于a&&b:
你前面比较的时候a都非0,为真,那还得接着看b,所以b会自增啊。
到了a为0,不管b是啥整个式子都为0了啊,就不需要看b了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-9 17:19:50 From FishC Mobile | 显示全部楼层
tsembrace 发表于 2013-10-9 15:52
对于a&&b,若a为1,则再处理、判定b;若a为0,则不处理b直接整式判定为0;
对于a||b,也是类似的,若a为1, ...

也不对啊,那   b 的值应该一直是一才对吧?     不好意思,啰嗦了!在上班,思绪老被打断!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

理解了,谢谢你!     理解能力太差了,唉...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-9 17:24:55 | 显示全部楼层
啃啃 发表于 2013-10-9 17:10
知道了,之前  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

评分

参与人数 1鱼币 +1 收起 理由
bare + 1 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-10 10:03:44 | 显示全部楼层
tsembrace 发表于 2013-10-9 17:24
int a = -2 , b = 0;
while(a++ && ++b)
第一步:先判断a=-2,非0为真,再a++,a=-1;再继续判断(++b),(++ ...

一步一步分析得很到位啦。

这个 && 运算是自左向右的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-11 13:23:12 | 显示全部楼层
学习一席哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 23:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表