询问一个Delphi问题

HitSoft 2007-12-25 11:50:35
我是刚学Delphi不久,在自学到数据类型,有一个程序的其中一个语句看不懂,请各界高手给予小弟一点提示!
var
c:Char;

begin
c:=High(Char);
Inc(c,70);
WriteLn(c);
WriteLn(Pred(c));
WriteLn(Succ(c));
ReadLn;
end.
将c定义为Char后,将ASCII字符型的最大值255赋给字符变量c,然后Inc(c,70)这个语句是将变量c的值加上70,为什么c的值是69,而不是255+70的值呢?上面的程序我是根据Delphi基础教程里面写出来的。
以上的程序得出的结果是:
E
D
F
...全文
101 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingisw 2007-12-27
  • 打赏
  • 举报
回复
溢出
HitSoft 2007-12-25
  • 打赏
  • 举报
回复
我刚才再看一次上面的程序,得到以下的个人看法:
c:=High(Char); 这段语句只是将ASCII字符型的最大值255赋给字符变量c,而不是c真正的值,只是代表c取值范围在0到255之间,然后Inc(c,70)这个语句是将变量c的值加上70,因变量c保存的是单字节无符号整数值,所以c的取值范围由0到255变为0到69,所以c的实际值是69。
以上是个人重新看一次代码时,所猜测的观点,如果有更好的观点,请高手指点一下!
HitSoft 2007-12-25
  • 打赏
  • 举报
回复
很多谢楼上几位的提示,我会根据你们的提示再重新思考这个程序,谢谢!
小呆之家 2007-12-25
  • 打赏
  • 举报
回复
楼主应当看看什么是数据类型值的"回绕"特性.
简单地说:
char类型数据其范围是一个byte.也就是0..255;
若有变量a:char;则a能存储的值范围是:0..255;
如果你给A赋值为255,则A的值对应的二进制码为:11111111(0xFF);
此时,你再将A加1时,通过运算,得到会的值就应当是256(0x100);其二进制表示为000100000000;
要保存这个数据,实际上就要大于一个字节的空间了,但你定义的变量A,只有一个字节,此时写入数据时,会有什么情况呢?
实际上,二制过数据写入时,是从低位向高位进行数据位的移动的,
如果数据发生溢出,最高位的数据位就被“切”除了。因此,最后保存的数据就是00000000;前面的0001就是被切除的部份。
因此最后的值就是0(0x00);指定数据类型的变量的值因此由最大值,变成了该数据类型值的最小值,
从我们的角度来看,就是“回绕”了。(从终点又回到起点)
相同的示例,可以参考汽车的里程表!或是电表的计数器。。。。。。

sanguomi 2007-12-25
  • 打赏
  • 举报
回复
楼上正解
stherix 2007-12-25
  • 打赏
  • 举报
回复
var
c:Char;

begin
c:=High(Char); //这里把#255赋给c
Inc(c,70); //由于c是单字节数据,数据范围是#0..#255,数据溢出 所以c变成(255+70) mod 256 [69]
WriteLn(c);
WriteLn(Pred(c));
WriteLn(Succ(c));
ReadLn;
end.
开发环境: Delphi7+WinXP说明: 一个delphi写的安装程序. 经常在网上看到一些网友询问用什么工具来作安装程序,或是某某安装程序的用法.想了一下,其实也很好作. 主要原理是把要安装的文件作成资源文件,安装时再把资源文件从程序是释放出来.如果对资源文件不熟的话,制作的rc文件附在其中,可以看一下.由于时间的关系,所以在背景音乐播放方面有一点遗憾,只把代码加上了,但是没有加入资源文件,所以如果有兴趣的话,你可以加入一份wav播放看一下. 此外还加入了版本检测的功能,主要是利用注册表,在安装时要先读取注册表,如果发现以前安装过本软件则读取其路径,为本次安装提供方便,如果发现已安装的版本高于些版本则出现提示(由自己来定). 安装一般的程序时,这样的实例已经够了,但是大家知道,如果用到数据库的话,那么一定要带上引擎的,但是这个实例中没有涉及到,有时间的话,我会再写一个出来的. 自己作的安装程序最大的一个好处就是界面可以由自己来定义,但是没办法,我的美工有点差,所以没有什么特别之处,如果有同志能作出好的界面或是有建设性的意见,欢迎联系. 最后要作一点重要的说明,关于那个"神奇的demo"--那不是我作的.可能是九九年(也可能不准确)<<电脑爱好者>>上有一大篇关于它的文章,demo是由几个国外的多媒体高手合作完成的,最后经过了超超超高度的压缩,在不到六十四K的文件里装下了几分钟的仿3D动画,另外还有精美的音效.可以说这是一个奇迹.前不久才不小心从网上下载了下来,和大家分享.涉及到的知识:1.注册表的使用;2.资源文件的制作,使用;3.多线程中api播放wav;4.快捷方式;包含文件: 声明: 本代码,属免费源代码.可用于任何形式的传播.在传播过程中如果有必要,你完全可以不理会本代码的完整性. 破天惊工作室,欢迎交流:E-Mail:Tresss@sohu.com

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧