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