整數(shù)類型的范圍如下表。
表12.3 整數(shù)類型的范圍
━━━━━━━━━━━━━━━━━━━━━━━━━━━
類型 范圍 格式
───────────────────────────
Shortint -128 .. 127 有符號8位
Integer -32768 .. 32767 有符號16位
Longint -2147483648 .. 2147483647 有符號32位
Byte 0 .. 255 無符號8位
Word 0 .. 65535 無符號16位
━━━━━━━━━━━━━━━━━━━━━━━━━━━
12.1.1.4 浮點異常
浮點異常是在進(jìn)行實數(shù)操作時產(chǎn)生的,它們都從一個EMathError類派生,但與整數(shù)異常相同,程序運行中引發(fā)的總是它的子類EInvalidOp、EZeroDivide、EOverFlow、EUnderFlow。
表12.4 浮點異常類及其引發(fā)原因
━━━━━━━━━━━━━━━━━━━━━━━━
異常類 引發(fā)原因
────────────────────────
EInvalidOp 處理器碰到一個未定義的指令
EZeroDivide 試圖被零除
EOverFlow 浮點上溢
EUnderFlow 浮點下溢
━━━━━━━━━━━━━━━━━━━━━━━━
EInvalidOp最常見的引發(fā)原因是沒有協(xié)處理器的機(jī)器遇到一個協(xié)處理器指令。由于在缺省情況下Delphi總是把浮點運算編譯為協(xié)處理器指令,因而在386以下微機(jī)上常常會碰到這個錯誤。此時只需要在單元的接口部分設(shè)置全局編譯指示{$N-},選擇利用運行時間庫進(jìn)行浮點運算,問題就可以解決了。
各種類型的浮點數(shù)(Real、Single、Double、Extended)越界引起同樣的溢出異常。這同整數(shù)異常類是不同的。
12.1.1.5 類型匹配異常
類型匹配異常EInvalidCast當(dāng)試圖用As 操作符把一個對象與另一類對象匹配失敗后引發(fā)。
12.1.1.6 類型轉(zhuǎn)換異常
類型轉(zhuǎn)換異常EConvertError當(dāng)試圖用轉(zhuǎn)換函數(shù)把數(shù)據(jù)從一種形式轉(zhuǎn)換為另一種形式時引發(fā),特別是當(dāng)把一個字符串轉(zhuǎn)換為數(shù)值時引發(fā)。下面程序中的兩條執(zhí)行語句都將引發(fā)一個EConvertError異常。
var
rl : Real;
int: Integer;
begin
rl := StrToFloat(' $140.48');
int := StrToInt(' 1,402 ');
end;
要注意并不是所有的類型轉(zhuǎn)換函數(shù)都會引發(fā)EConvertError異常。比如函數(shù)Val當(dāng)它無法完成字符串到數(shù)值的轉(zhuǎn)換時只把錯誤代碼返回。利用這一點我們在(6.2)節(jié)中實現(xiàn)了輸入的類型和范圍檢查。
相關(guān)推薦:2010年9月計算機(jī)等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |