这几天急着进入富农阶层,因此放分少一点,莫怪言归正传。以下代码在Delphi7运行,看结果,莫非是Delphi的BUG?
var
I: integer;
begin
I := 2147483648;{虽然有提示,但仍能通过编译}
Showmessage(BoolToStr(I>0, True)); {False!}
Showmessage(IntToStr(High(Integer)));{2147483647!} //I := -2147483648; {报错,无法通过编译}
I := Low(Integer); {但这样就可以了}
Showmessage(IntToStr(I)); {-2147483648}
end;
如果是BUG,该打哪一个补丁?www.delphifans.com下载安装了Delphi7专业版Update1,无改变。谢
var
I: integer;
begin
I := 2147483648;{虽然有提示,但仍能通过编译}
Showmessage(BoolToStr(I>0, True)); {False!}
Showmessage(IntToStr(High(Integer)));{2147483647!} //I := -2147483648; {报错,无法通过编译}
I := Low(Integer); {但这样就可以了}
Showmessage(IntToStr(I)); {-2147483648}
end;
如果是BUG,该打哪一个补丁?www.delphifans.com下载安装了Delphi7专业版Update1,无改变。谢
解决方案 »
- 请教Tchart 动态建LINE,自己写了下,不能用,请指正,谢谢
- 问两个“为什么”
- 请问怎么发送数据包,实在没分了,以后可以补上
- 一个编译错误寻求解决方法!!
- 哪位知道Delphi7.0的全部函数,过程下载!
- 急!在线等,马上给分
- 过程中的Result是什么变量?
- 我如何对一条已存在的的数据里的图像字段,进行修改或删除?
- 有谁能告诉我怎样才能够在DELPHI中实现对*.dwg文件的函数调用?(调用后直接打开显示dwg图形文件)。
- 求救:在TStringgrid的OnSelectCell事件中如何得到目前鼠标点击的行数和列数?
- DBNavigator 图片
- 请问if和case语句如何在表达式成立的时候什么也不做?
最高位为1,即,它作为32位的有符号数integer时,它是个负数(其实就是数:-2147483648)简单来说:integer的表数范围是 2147483647 至 -2147483648正数2147483648超过了integer的表数范围,改用Int64吧。
Integer的范围 -32768——32767
Longint的范围 -2147443648 到 2147443647
如果还继续往上,2147483649,2147483650,.....最后到$FFFFFFFF,就是DWORD(-1)了.
var
I: integer;
begin
I := 2147483648;{明明超出范围,为什么只有提示,但仍能通过编译,而(继续往下看)}
Showmessage(BoolToStr(I>0, True)); {这个很明白,只是为了说明问题}
Showmessage(IntToStr(High(Integer)));{这个同上} //I := -2147483648; {--------这个按书上说的,应该不报错啊,为什么直接无法通过编译呢}
I := Low(Integer); {----------并且,同是一个值,为什么这样做就可以了呢?(下一句是验证同值)}
Showmessage(IntToStr(I)); {-2147483648}
end;
asm
mov ebx,$80000000
end;
I := $80000000;
I := -2*1073741824;
用以上3句任何一句代替都能顺利编译.
或者记得常常打开下CPU和Memory窗口
var
I: integer;
begin
I := 2147483648;{虽然有提示,但仍能通过编译}
Showmessage(BoolToStr(I>0, True)); {False!}
Showmessage(IntToStr(High(Integer)));{2147483647!} I := -2147483648; {无错,编译通过}
Showmessage(IntToStr(I)); {结果为-2147483648}
I := Low(Integer); {但这样就可以了}
Showmessage(IntToStr(I)); {-2147483648}
估计是d7的问题
var
I: integer;
begin
I := 2147483648;{提示:Constant expression violates subrange bounds}
Showmessage(BoolToStr(I>0, True)); {这个很明白,只是为了说明问题}
Showmessage(IntToStr(High(Integer)));{这个同上} //I := -2147483648; {Delphi 2009 正常编译通过}
I := Low(Integer); {----------并且,同是一个值,为什么这样做就可以了呢?(下一句是验证同值)}
Showmessage(IntToStr(I)); {-2147483648}
end;用D7确实有问题。可能的确是D7的BUG.