12.1.1.3 整数异常 整数异常都是从一个EIntError类派生的,但程序运行中引发的总是它的子类:EDivByZero,ERangeError,EIntOverFlow。 表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位 ━━━━━━━━━━━━━━━━━━━━━━━━━━━  
2/2 首页 上一页 1 2 |