[VB6 ] 溢位

看板Visual_Basic作者 (tt)時間15年前 (2010/05/10 14:17), 編輯推噓3(307)
留言10則, 2人參與, 最新討論串1/1
Case1: a=380 b=100 c=a*b (OK) ------------------- Case2: c=380*100 (錯誤:溢位) ------------------- 查資料的結果可以用 Clng() 不管加在 380 or 100 就可以解決這個問題。 那case1可以運作的原因是甚麼呢? 那case2不行運作的原因是甚麼呢? 感謝大家~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.35.104

05/10 15:33, , 1F
先宣告c為Long就可以啦 可能你要查一下整數和長整數的差別
05/10 15:33, 1F

05/11 23:18, , 2F
先宣告c為Long還是不行. c=380*100會溢位的解釋為:
05/11 23:18, 2F

05/11 23:20, , 3F
380為Integer,100為Integer,VB的規則是Integer*Integer=
05/11 23:20, 3F

05/11 23:21, , 4F
Integer.但380*100已經超過Integer的整數範圍+32767,所以溢
05/11 23:21, 4F

05/11 23:22, , 5F
位.至於Case1的寫法為何不會溢位我也不了解,想請高手解釋一
05/11 23:22, 5F

05/11 23:22, , 6F
05/11 23:22, 6F

05/11 23:26, , 7F
自問自答..剛剛試了沒有宣告a,b為Integer的情況下a=380,
05/11 23:26, 7F

05/11 23:27, , 8F
b=100, a跟b在VB下的型態都是Variant/Integer.可能是Variant
05/11 23:27, 8F

05/11 23:29, , 9F
/Interger相乘=Variant/Long,所以沒有溢位問題.
05/11 23:29, 9F

05/11 23:30, , 10F
若Case1先Dim a as Integer, b as Integer, a*b就會溢位
05/11 23:30, 10F
文章代碼(AID): #1BvwJ-wJ (Visual_Basic)
文章代碼(AID): #1BvwJ-wJ (Visual_Basic)