表
12.2 整数异常及其产生原因━━━━━━━━━━━━━━━━━━━━━
异常类 引发原因
─────────────────────
EDivByZero 试图被零除
ERangeError 整数表达式越界
EIntOverFlow 整数操作溢出
━━━━━━━━━━━━━━━━━━━━━━
ERangeError当一个整数表达式的值超过为一个特定整数类型分配的范围时引发。比如下面一段代码将引发一个ERangeError异常。
var
SmallNumber: ShortInt;
X , Y: Integer;
begin
X := 100;
Y := 75;
SmallNumber := X * Y;
end;
特定整数类型包括
ShortInt、Byte以及与整数兼容的枚举类型、布尔类型等。例如:type
THazard = ( Safety , Marginal , Critical , Catastrophic );
var
Haz: THazard;
Item: Integer;
begin
Item:= 4;
Haz:= THazard ( Item );
end;
由于枚举数越界而引发一个ERangeError异常。
数组元素越界也会引发一个ERangeError异常,如:
var
Values: array[1..10] of Integer;
i: Integer;
begin
for i := 1 to 11 do
Values[i] := i;
end;
ERangeError异常只有当类型检查打开时才会引发。这可以在代码中包含{$R } 编译指示或设置IDE Option|Project的Range_Checking Option选择框。
EIntOverFlow异常类在Integer、Word、Longint三种整数类型越界时引发。如:
var
I : Integer;
a,b,c : Word;
begin
a := 10;
b := 20;
c := 1;
for I := 0 to 100 do
begin
c := a*b*c;
end;
end;
引发一个EIntOverFlow异常。
EIntOverFlow异常类只有在编译选择框Option|Project|Over_Flow_Check Option选中时才产生。当关闭溢出检查,则溢出后变量保留该类整数的最大范围值。
整数类型的范围如下表。
表12.3 整数类型的范围
━━━━━━━━━━━━━━━━━━━━━━━━━━━
类型 范围 格式
───────────────────────────
Shortint -128 .. 127 有符号8位
Integer -32768 .. 32767 有符号16位
Longint -2147483648 .. 2147483647 有符号32位
Byte 0 .. 255 无符号8位
Word 0 .. 65535 无符号16位
━━━━━━━━━━━━━━━━━━━━━━━━━━━
12.1.1.4 浮点异常
浮点异常是在进行实数操作时产生的,它们都从一个EMathError类派生,但与整数异常相同,程序运行中引发的总是它的子类EInvalidOp、EZeroDivide、EOverFlow、EUnderFlow。
表12.4 浮点异常类及其引发原因
━━━━━━━━━━━━━━━━━━━━━━━━
异常类 引发原因
────────────────────────
EInvalidOp 处理器碰到一个未定义的指令
EZeroDivide 试图被零除
EOverFlow 浮点上溢
EUnderFlow 浮点下溢
━━━━━━━━━━━━━━━━━━━━━━━━
EInvalidOp最常见的引发原因是没有协处理器的机器遇到一个协处理器指令。由于在缺省情况下Delphi总是把浮点运算编译为协处理器指令,因而在386以下微机上常常会碰到这个错误。此时只需要在单元的接口部分设置全局编译指示{
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




