首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 整數異常類別完整解析:EDivByZero、ERangeError、EIntOverFlow 觸發條件與編譯器選項控制

     編輯:Delphi

整數異常繼承體系

皆繼承自 EIntError,執行期引發三子類別:

異常類別觸發原因
EDivByZero嘗試除以零
ERangeError整數運算式超出特定型別範圍
EIntOverFlow整數運算溢出

ERangeError 詳細觸發情境

整數運算式值超過特定整數型別分配範圍時觸發。特定整數型別含 ShortInt、Byte、相容整數的列舉型別、布林型別等。

範例一:ShortInt 指派溢出

var SmallNumber: ShortInt; X, Y: Integer;
begin
  X := 100; Y := 75;
  SmallNumber := X * Y;  { 7500 > 127,引發 ERangeError }
end;

範例二:列舉型別越界

type THazard = (Safety, Marginal, Critical, Catastrophic);
var Haz: THazard; Item: Integer;
begin
  Item := 4;
  Haz := THazard(Item);  { 列舉值 0~3,4 越界引發 ERangeError }
end;

範例三:陣列索引越界

var Values: array[1..10] of Integer; i: Integer;
begin
  for i := 1 to 11 do
    Values[i] := i;  { i=11 越界引發 ERangeError }
end;

關鍵:ERangeError 僅在型別檢查開啟時引發。程式碼加入 {$R+} 或 IDE Options | Project | Range Checking 勾選啟用。

EIntOverFlow 觸發條件與控制

Integer、Word、Longint 三型別越界時引發。例:

var I: Integer; a, b, c: Word;
begin
  a := 10; b := 20; c := 1;
  for I := 0 to 100 do
    c := a * b * c;  { 迅速超出 Word 範圍 0~65535,引發 EIntOverFlow }
end;

僅在編譯選項 Options | Project | Overflow Checking 勾選時產生。關閉溢位檢查時,溢位後變數保留該型別最大範圍值。

整數型別範圍對照表

型別範圍格式
Shortint-128 .. 127有號 8 位元
Integer-32768 .. 32767有號 16 位元
Longint-2147483648 .. 2147483647有號 32 位元
Byte0 .. 255無號 8 位元
Word0 .. 65535無號 16 位元
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved