CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

帮我分析分析

楼主hxgaa()2005-10-31 00:55:31 在 C/C++ / C语言 提问

void   main()  
   
        {  
   
                unsigned   char   index;  
   
                for(index=0;index<256;index++)  
   
              {  
   
                    printf("%d\n",index);  
   
              }  
   
        }  
  这段代码运行怎么是死循环呢?当index为256时应该跳出循环啊 问题点数:10、回复次数:18Top

1 楼steel007(小宝)(工作在windows和linux平台上)回复于 2005-10-31 01:20:46 得分 0

unsigned   char一共是8位的,那么只能存到255,过了之后又是0了,所以会永远转下去。Top

2 楼kobefly(科比--网络学习中)回复于 2005-10-31 09:06:01 得分 10

当index为256时应该跳出循环啊  
   
  unsigned   最大255,哪来的256啊?  
  Top

3 楼cdo(Everything has a favourable turn)回复于 2005-10-31 09:52:59 得分 0

是呀,unsigned过了255又回到0,所以是死循环呀。Top

4 楼henan_lujun(地平风线)回复于 2005-10-31 10:06:45 得分 0

楼主粗心了,呵呵!Top

5 楼hxgaa()回复于 2005-10-31 10:37:55 得分 0

照你说void   main()  
   
        {  
   
                unsigned   int   index;  
   
                for(index=0;index<=65535;index++)  
   
              {  
   
                    printf("%d\n",index);  
   
              }  
   
        }  
    当index为65535后,也不是变为0拉吗?但我运行是它会跳出循环的。这个类型的边界问题请各位详细给我说说吧。谢谢,在线等  
  Top

6 楼kobefly(科比--网络学习中)回复于 2005-10-31 11:49:29 得分 0

照你说void   main()  
   
        {  
   
                unsigned   int   index;  
   
                for(index=0;index<=65535;index++)  
   
              {  
   
                    printf("%d\n",index);  
   
              }  
   
        }  
    当index为65535后,也不是变为0拉吗?但我运行是它会跳出循环的。这个类型的边界问题请各位详细给我说说吧。谢谢,在线等  
   
  =====================  
   
  老大,你的int是4字节还是2字节?  
  Top

7 楼wdchxzh(wangchang)回复于 2005-10-31 12:05:21 得分 0

4字节2字节不一样,但是怎么不一样了啊   ?Top

8 楼kobefly(科比--网络学习中)回复于 2005-10-31 12:12:41 得分 0

4字节2字节不一样,但是怎么不一样了啊   ?  
  =========================  
  这位兄台是什么意思??  
  没有理解  
   
  我的意思是说,如果整形是四字节,那他表示的范围跟65535相比  
  海了去了Top

9 楼hxgaa()回复于 2005-10-31 12:13:23 得分 0

4字节吧。我用的visualC++Top

10 楼hxgaa()回复于 2005-10-31 12:19:49 得分 0

海了去了  
  ============================  
  什么意思?Top

11 楼lgyangell()回复于 2005-10-31 12:30:11 得分 0

海了去了  
  ================  
  意思就是大很多~-_-!Top

12 楼hxgaa()回复于 2005-10-31 12:34:50 得分 0

那么我的意思是如果当   index一旦超过它自己的范围时,是不是也要变为0,而为死循环?Top

13 楼kobefly(科比--网络学习中)回复于 2005-10-31 12:41:41 得分 0

hxgaa()   (   )   信誉:100     2005-10-31   12:34:00     得分:   0      
     
     
        那么我的意思是如果当   index一旦超过它自己的范围时,是不是也要变为0,而为死循环?  
       
     
  是的吧  
   
  你四字节的   unsigned   int最大值应该是2的32次方减1吧,Top

14 楼wushimiang12()回复于 2005-10-31 12:44:14 得分 0

unsigned   char一共是8位的,那么只能存到255,过了之后又是0了,所以会永远转下去,這是正解!Top

15 楼hxgaa()回复于 2005-10-31 12:49:23 得分 0

对,当index超过2的32次方减1时,index又变为0,从而死循环,这是不是二进制的进位问题,系统会把所进的位给去掉。(4字节为32位,当index为2的32次时,就会进位第33位,系统就会把第33位给去掉,这样index就变为0拉吧。)我说的对吗?Top

16 楼lilinking(大笨牛)回复于 2005-10-31 12:58:19 得分 0

是溢出了11111111->1   00000000  
  地址中的值就是0了吧。Top

17 楼kobefly(科比--网络学习中)回复于 2005-10-31 13:31:55 得分 0

hxgaa()   (   )   信誉:100     2005-10-31   12:49:00     得分:   0      
     
     
        对,当index超过2的32次方减1时,index又变为0,从而死循环,这是不是二进制的进位问题,系统会把所进的位给去掉。(4字节为32位,当index为2的32次时,就会进位第33位,系统就会把第33位给去掉,这样index就变为0拉吧。)我说的对吗?  
       
     
  应该就是你这个意思Top

18 楼hxgaa()回复于 2005-10-31 13:50:06 得分 0

谢谢给位Top

相关问题

  • 请大家帮我分析分析
  • 大家帮我分析分析!
  • 请教高手帮我分析分析!
  • 【小芸】我很迷惑,请大家帮我分析分析......
  • 大伙帮我分析分析,看我有没有戏
  • 请各位大侠帮我分析分析,感激不尽!!!
  • 大家帮我分析分析:Samba的配置问题
  • ping返回值奇怪。大家帮我分析分析
  • C#中的错误,大家帮我分析分析
  • 启动jbuilder发生错误,请高手帮我分析分析!!!

关键词

  • 去掉
  • 变为
  • 就是

得分解答快速导航

  • 帖主:hxgaa
  • kobefly

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo