iT邦幫忙

DAY 3
3

程式設計心法系列 第 3

程式設計心法:2.資料型別--整數

整數是變數宣告中很常用到的一種型別,應該沒有什麼好注意的吧?

除了前一篇講到的數字型別應該注意的識相之外,整數還有一些特別需要注意的地方呢!

喔?那說來聽聽吧(板凳、托腮)。

(咳)好,那我們就開始吧!Let's Go.
.檢查整數的除法
在撰寫除式的時候,我們很容易就以 x=a/b 來表示
可是當您的變數型別為整數或者是被除數/除數為整數型別時,您期望得到的值可能會不一樣!
讓我們假設,
第一種情況:

dim x as integer
dim a as integer, b as integer

x=a/b

當 a=7, b=10 我們期望應該得到 0.7,但是實際上執行的結果:x=0

Why?

因為 a 為整數型別,b 也為整數型別,所以兩個整數的除法也會得到整數的結果!
即使您將 x 宣告為浮點數,也是一樣 x=0.0

第二種情況:

dim x as integer
dim a as double, b as double

x=a/b

通常,在 Compile 的過程,強型別的限制就會出現 error,或者您也會得到 x=0 的結果。

.檢查溢位(Overflow)
在 16 位元的時代(或更早),一個整數的最大值為 2^16 - 1(就正整數而言),
當您的變數值超過 65536 的時候(有正負值的整數,最大值為 32767),
就會產生溢位,而且通常是在 Runtime 的時候才會發生,那給使用者的感覺真的會很不好。

所以避免溢位的方法,最好是將預期變數值會很大的時候(如計算 billing),
採用 Long Integer 或 Double 的變數型別,避免掉這種情況。
(當然愈新的開發工具,在這部份有一些特別的處理,
如 int64 或 default integer 為 32 位元的長度)

.檢查計算式中間值(Intermediate results)的溢位
如同前面的敘述,除了數值本身產生的溢位之外,也有可能兩個數值都沒有溢位,
但相乘之後的值發生溢位的情況。
(如 原幣*匯率,當原幣為美金時,相乘的結果可能會使變數爆掉)

現今的 Compiler 做得比較好,對於溢位都會 raise error,不會像書中所提的,
讓您的程式因溢位產生錯誤的值而導致錯誤的計算結果。

本系列文章


上一篇
程式設計心法:1.資料型別--數字
下一篇
程式設計心法:3.資料型別--浮點數
系列文
程式設計心法31

2 則留言

0
海綿寶寶
iT邦大神 1 級 ‧ 2009-10-09 09:37:51

錯字一枚「拖腮」應是「托腮」

「托腮」是「美人托腮」,很有氣質的畫面
「拖腮」是在地上拖,通常被用在被拖去海扁時使用

證明我有很認真看完整篇。

jamesjan iT邦高手 1 級 ‧ 2009-10-09 12:01:09 檢舉

還好不是拖腮連...XD

lbcgh iT邦研究生 4 級 ‧ 2009-10-10 14:30:15 檢舉

錯詞一枚「注意的識相」應是「注意的事項」
~我用新注音輸入也常發生
我也很認真在看喔~

0
pantc328
iT邦研究生 1 級 ‧ 2009-10-09 11:27:46

Good!
但這好像是基本功吧!
我比較期待的Float.因為這是我PG人生第一個研究的問題.

jamesjan iT邦高手 1 級 ‧ 2009-10-09 12:02:45 檢舉

呵呵(搔頭)
在 pantc328 大前耍大刀了 ^^

我要留言

立即登入留言