打印

51程序小发现

[复制链接]
2989|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Imakey|  楼主 | 2013-6-2 19:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wangch_sh| | 2013-6-2 20:13 | 只看该作者
把i>=0改为i>0.

使用特权

评论回复
板凳
蓝魔大师弟| | 2013-6-2 20:25 | 只看该作者
求教

使用特权

评论回复
地板
叶伤| | 2013-6-2 20:27 | 只看该作者
uchar无符号字符类型,范围是0~255。到0后仍执行减一,变成255,大于0,继续循环。然后就死了。

使用特权

评论回复
5
Imakey|  楼主 | 2013-6-2 21:15 | 只看该作者
4楼正解,调试出来了,查看i的动态值发现是 0x03→0x02→0x01→0x00→0xFF→0xFD..........0x00→0xFF→..........
然后就死了,我还是不明白,怎么会这样?是编译器的问题??

使用特权

评论回复
6
wangch_sh| | 2013-6-2 21:41 | 只看该作者
程序问题。for循环不对,i从0到255一直大于等于0.

使用特权

评论回复
7
wangch_sh| | 2013-6-2 21:42 | 只看该作者
或者换成有符号字符型。

使用特权

评论回复
8
Imakey|  楼主 | 2013-6-2 21:51 | 只看该作者
嗯嗯,换成有符号的就行了。

使用特权

评论回复
9
elife| | 2013-6-2 22:06 | 只看该作者
这个要是编译器能警告一下就好了,好像"if(i=1) ..;"一样.

使用特权

评论回复
10
叶伤| | 2013-6-3 07:28 | 只看该作者
把数字看成2进制,0=0000 0000,减一不够减,要借位,1 0000 0000- 1=0 1111 1111,高位丢弃,就变成了00h-1=ffh。255+1=0也一样,不过是进位。八位数据就把第九位之后的丢掉,就像溢出,十六位int就把第十七位丢弃,类推。

使用特权

评论回复
11
叶伤| | 2013-6-3 07:46 | 只看该作者
好像解释错了。0-1用补码表示是0xff(带符号),用添1表示是0xff。可0-3补码是0xfd,添1是0xfc。不知道编译器是遵从哪种?哪位能试试?

使用特权

评论回复
12
huazhongwang| | 2013-6-3 09:55 | 只看该作者
好好看下数据结构吧

使用特权

评论回复
13
技美电子| | 2013-6-3 10:45 | 只看该作者
程序设计问题!v好好补补编程基础!

使用特权

评论回复
14
liuxiaoyun1210| | 2013-6-3 13:58 | 只看该作者
当i=0时,执行完后,i再减1,此时i=255,这样就是一个死循环。

使用特权

评论回复
15
gcxzhz| | 2013-6-3 14:59 | 只看该作者
unsigned int 是0-255  就不可能小于0

使用特权

评论回复
16
电子write_cai| | 2013-6-3 17:15 | 只看该作者
一般我是不会写成这样的程序。

使用特权

评论回复
17
tangzzbb| | 2013-6-3 18:08 | 只看该作者
养成一个好习惯,象for中的计数i采用有符号数,不要动不动就用无符号数,这样会带来很多好处,以后就体会到了。

使用特权

评论回复
18
cityant| | 2013-6-3 21:50 | 只看该作者
小鸟学习了!~

使用特权

评论回复
19
小营七郎| | 2013-6-3 22:13 | 只看该作者
学习了。

使用特权

评论回复
20
1230456| | 2013-6-3 22:17 | 只看该作者
哦~   学习了~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:联系邮箱 997494013@qq.com

76

主题

779

帖子

4

粉丝