新觀念的 VB6 教本 第5章 資料與運算
5-1 資料的表示法
資料的表示法 數值資料 — 整數、實數、科學記號 字串資料 日期時間資料 布林資料
整數 十進位的表示法:逗號是不能使用的,如10,000。 十六進位數的表示法:前面加上&H 八進位數的表示法:前面加上 & 或 &O(字母O) 100 100的十進位表示法 &H64 100的十六進位表示法 &144 100的八進位表示法 &O144 也是100的八進位表示法 十六進位是 64((64)16=6×161+4×160=100 八進位是 144((144)8 =1×82+4×81+4×80=100
實例練習(p.136) 寫一程式讓使用者輸入十進位數,然後顯示出其十六進位及八進位數。
實例練習 -- Hex 及 Oct 函數 想要將十進位數表示成十六進位數及八進位數,並不需要自己寫程式進行轉換,VB 所提供的 Hex 及 Oct 函數,就可以幫我們做好這件事情,例如: Print Hex(100) 64 Print Oct(100) 144
實例練習 – 程式撰寫 在表單上佈置一命令鈕,然後撰寫以下程式: Private Sub Command1_Click() A = Val(InputBox(“輸入一十進位數”)) MsgBox "十六進位數 = &H" & Hex(A) & vbCrLf & "八進位數 = &O" & Oct(A) End Sub
實數 小數方面,VB的表示法也跟數學完全相同,如3.14159、0.0016、-8000.5等均為正確的寫法。
實數 -- 科學記號 一般科學記號表示法 說 明 9750000000 = 9.75×109 將小數點左移9位,得到 9.75,再乘以109 0.00000056 = 5.6×10-7 將小數點右移7位,得到 5.6,再乘以10-7 VB 使用算術運算符號表達,例如: 9.75×109 表達成 9.75*10^9 5.6×10-7 表達成 5.6*10^-7 * 代表乘號, ^ 代表次方符號。
實數 -- 浮點數表示法 科學記號中的「有效數字」及「指數」 例如:
字串資料 以 “” 括起來的文數字都算是字串,如: "RUN!PC" "Address #83" "1998" "12+75=?" "旗標資訊月刊" Print "RUN!PC" ' 放到記憶體時, 兩邊的雙引號會被去掉, RUN!PC ' 所以輸出時也就沒有雙引號了。
字串資料 -- 如果雙引號裡面又有雙引號 VB 規定字串中的雙引號要用兩個雙引號來表示,例如: Print "ABC"xyz" ' VB 以為 "ABC"xyz" 中的 "ABC" 是字串, ABC ' 所以輸出了 ABC。
日期時間資料 必須用 ## 括起來 #9:30# 表示上午9點30分 #1997/12/31# 表示1997年12月31日 #9:30# 表示上午9點30分 #1997/12/31# 表示1997年12月31日 輸出時,VB一律使用「系統的日期格式」,並且去掉 ## 再輸出,例如: Print #28 Feb 1998# 1998/2/28
標準的日期表示法 標準的日期表示法是 #西元年/月/日#,例如: #1997/7/1# 表示 西元 1997 年 7 月 1 日 #2005/12/31# 表示 西元 2005 年 12 月 31 日 西元年從1930到2029可以簡寫成30到99及00到29: #89/7/1# 等於 #1989/7/1#。
非標準的日期表示法 如果不是標準日期表示法,VB 也會做智慧的判斷,例如以下的寫法都表示 #1997/2/28#(1997年2月28日): #2 28 97# #97 2 28# #28 Feb 1997# #February 28, 1997#
系統的日期格式(1) 同樣是 #1998/2/28#,可能有些人的機器輸出了「1998/2/28」,但也可能有些人的機器輸出了「2/28/1998」,這是因為VB 採用系統的日期格式來輸出資料,而系統的日期格式又可以使用以下方法來進行設定:
系統的日期格式(2) 以上圖為例,所設定的日期格式為 "MM/dd/yyyy", 所以 #1998/2/28# 將會被輸出成「02/28/1998」。
錯誤的日期表示法 不存在的日期及中文日期,VB 是不接受的,所以: #1997/13/29# 錯誤, 月份 13 超過範圍 #1997/2/29# 錯誤, 1997年不是閏年, 2月只有 28天 #1997 年 7 月 1 日# 錯誤,中文日期
標準的時間表示法 標準的時間表示法是 #時:分:秒 AM# 及 #時:分:秒 PM#,其中 AM 表示上午,PM 表示下午,例如:
非標準的時間表示法 如果不是上述的標準時間表示法,VB 也會做智慧的判斷,例如: #9 A# 等於 #9:00:00 AM# #17:3# 等於 #5:03:00 PM#
錯誤的時間表示法 輸入時間時,有效的時分秒分別是:時:0~23、分秒:0~59,所以下面的表示法是錯誤的: #24:00:00# 錯誤, '時' 超過 23 #17:60:00# 錯誤, '分' 超過 59 #12:00:-1# 錯誤, '秒' 是負數
VB 如何輸出時間? 輸出時間時,VB 也一律採用系統的時間格式來輸出,同樣會去掉 ##,例如: Print #17:30:50# PM 05:30:50 時間的輸出也一律使用系統的時間格式,並且去掉##
系統的時間格式(1) 同樣是 #17:50:30#,可能有些人的機器輸出了「17:50:30」,但也可能有些人的機器輸出了「PM 05:50:30」,這是因為 VB 採用系統的時間格式來輸出資料,而系統的時間格式又可以使用以下方法來進行設定:
系統的時間格式(2) 以上圖為例,所設定的時間格式為 “tt hh:mm:ss”,所以 #17:50:30# 將會被輸出成「PM 05:50:30」。(註:時間格式中的 “tt” 表示以 AM 來表示上午、以 PM 來表示下午)
時間的注意事項 ‘0 時’ VB 將它表示成 #12:00:00 AM#,而 ‘12 時’ 則是 #12:00:00 PM#,所以: Print #0:30:0# AM 12:30:00 Print #12:00:00# PM 12:00:00 時間的表示法中也可以把日期涵蓋進來,例如 #1997/2/28 5:03:00 PM# 即表示1997年2月28日, 下午5點零3分。
在 Windows 98 中,設定00~99時序的方法如下:
5-2 串接運算
布林資料 布林資料指的是「真」與「假」的集合,又稱「真假資料」。 「真」以 True 表示,「假」以 False 表示。 布林資料常用來代表一個條件式的成立與否,例如: ? 2 > 1 ' 利用即時運算視窗詢問 VB:「2 > 1嗎?」 True ' VB 回答:「真的」 ? 2 < 1 ' 再問:「2 < 1 嗎?」 False ' VB 回答:「假的」
字串與字串的串接 字串與字串的串接就是把兩個字串連接成為一個新的字串,其運算符號是加號 ‘+’。例如: First = "Peter" Last = "Wang" Print First + " " + Last Peter Wang
串接運算的注意事項 ‘+’ 號用在字串與字串之間叫做「串接運算」,用在數值與數值之間叫做「算術運算」,例如: ? 50 + 20 ' 算術運算 70 ? "50" + "20" ' 串接運算 5020
各種類型資料的串接 ‘&’是串接用的運算符號,在 ‘各種類型資料’ 的串接 S1 = "Today is " D = #8/24/97# S2 = S1 & D ' 字串與日期的串接 Print S2 Today is 1997/8/24 Print “12345.” & 678 ‘ 字串與數值串接後,直接印出 12345.678 Print 678 & 0.12345 ‘ 數值與數值的串接 6780.12345 X = "VB" + 4.0 ' 錯誤!'+' 號只能用來串接字串與字串
5-3 比較運算
比較運算 比較 ‘運算符號’ 兩邊的數值後,傳回 True 或 False 比較運算符號 相當於數學上的 使 用 例 = > 1 > 2 傳回 False < 1 < 2 傳回 True >= 或 => ≧ 1 >= 2傳回 False <> 或 >< ≦ 1 <= 2傳回 True ≠ 1 <> 2傳回 True
比較運算 – 例子 Print 1 > 2 False B = 1 <> 2 Print B True
日期時間的比較(1) 時間的比較,後面的時間大於前面的時間: #9:30# 大於 #8:30# 時間的比較,後面的時間大於前面的時間: #9:30# 大於 #8:30# 但 #12:00:00 AM# 被視為 ‘0 時’,而 #12:00:00 PM# 被視為一天的中午 12 時,所以: #12:30:00 PM# 小於 #1:00:00 PM# 日期的比較中,後面的日期大於前面的日期: #1997/7/1# 大於 #1997/1/1# 00~99年表示2000~2029及1930~1999年,所以:#97/1/1# 大於 #1899/12/31#。
日期時間的比較(2) 同時涵蓋日期及時間的比較中,先比較日期再比較時間,例如: #97/1/1 0:00:00# 大於 #96/12/31 23:59:59# #97/1/1 3:00:00# 大於 #97/1/1 0:00:00# 如果一方有日期,一方沒有日期,則將沒有日期那一方的日期視為 #1899/12/30#,例如 #0:00:00# 相當於 #1899/12/30 0:00:00#,所以: #0:00:00# 大於 #1899/12/29 23:59:59# 如果一方有時間,一方沒有時間,則將沒有時間那一方的時間視為 #0:00:00#,所以: #97/1/1# 小於 #97/1/1 0:0:1#
字串的比較 比較的依據是字元的字元碼 。 比較方式是從每個字串的第一個字元開始依次比較其字元碼,直到比較出大小為止。 如果未比較出大小,而某一個字串已先達到最後一個字元,則長度較小的字串小於長度較大的字串。
知道字元碼的方法 英文範圍(0~127)內的字元:利用即時運算視窗執行 ? ASC("字元")。 中文字(包含兩個 byte):利用即時運算視窗執行 ? ASC(“中文字”) + 65536。 例如: ? ASC("A") 65 ' 字元 A 的字元碼等於 65 ? ASC("B") 66 ' 字元 B 的字元碼大於 A ? ASC("程") + 65536 46459 ' 中文字 '程' 的字元碼等於46459
判斷出字元的大小的規則 英文字母順序在前者,其字元碼較小,例:"a" < b"。 小寫字母 "大於" 大寫英文字母,例:"a" > "A"。 數字 "小於" 英文字母,例:"2" < "A"。 中文字 "大於" 英文字母,例:"程" > "a"。 數字字元<英文大寫字母<英文小寫字母<中文字 Print "kg" > "KG" True Print "COPY" < "COPYRIGHT" Print "ANGEL" < "ANGLE" Print "3-ANGEL" > "ANGLE" False Print "中文" > "English"
5-4 邏輯運算
邏輯運算 運算符號 使用例 功 能 說 明 Not Not A 反 A 若 A 為 True, 則 Not A 為 False And 功 能 說 明 Not Not A 反 A 若 A 為 True, 則 Not A 為 False And A And B A 且 B 只有當 A 及 B 同時為 True 時, 其結果方為 True, 否則為 False Or A Or B A 或 B 只要 A 或 B 為 True, 其結果便為 True
真值表 :T 代表 True,F 代表 False B Not A A And B A Or B T F Print True Or False True Print 4 > 3 And 1 > 4 False 4 > 3 And 1 > 4 =True And False =False
邏輯運算的對象 Not 2 > 1 Not 是以 2 > 1 這個比較運算式作為 運算的對象 Not 2 > 1 先求比較運算式的結果, = Not True 再進行邏輯運算 = False
綜合運算 -1 優先順序 運算符號 1 算術運算符號 ^ (指數運算) 2 - (負數運算) 3 *,/ (乘、除運算) 4 ^ (指數運算) 2 - (負數運算) 3 *,/ (乘、除運算) 4 \ (整數除法) 5 Mod (模數運算) 6 +,- (加、減運算)
綜合運算 -2 優先順序 運算符號 2 字串運算符號,+ 及 & 的優先順序相同 3 比較運算符號,其優先順序皆相同 4 邏輯運算符號 1 Not (反) And (且) Or (或) Xor (互斥) 5 Eqv (相等) 6 Imp (包含)
算術運算<優先於>字串運算<優先於>比較運算<優先於>邏輯運算 所以這個運算式: 20 >= 10 And 3^2 <= 3*2 算術運算,最優先 = 20 >= 10 And 9 <= 6 比較運算,次之 = True And False 邏輯運算,最後 = False
同一運算式中有優先順序相同的運算符號時,則運算順序是自左而右 12 / 3 * 2 = 4 * 2 = 8 如果我們想改變運算順序,可以使用左右括弧 12 / (3 * 2) = 12 / 6 = 2