帮我分析分析
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




