- 帖子
- 57
- 主題
- 7
- 精華
- 3
- 積分
- 60
- 點名
- 0
- 作業系統
- WINDOWSXP
- 軟體版本
- 2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2011-4-9
|
4#
發表於 2010-5-9 00:28
| 只看該作者
本帖最後由 呆呆 於 2010-5-13 00:16 編輯
我們就來看看幾種資料形態的操作方式
- Byte 實際上是一個佔用一個byte記憶體的整數值,其範圍是0~255 也就是 2 的 8 次方 = 256 個位置
任何超過這個範圍的整數值都會產生一個溢位的例外,例如- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim x As Byte
- x = 255
- x = x + 1
- MessageBox.Show(x)
- End Sub
複製代碼 如果你是一開始就指定 x = 256 , 那編譯器就沒法編譯(現代的編譯器也做得太主動了)
- SByte 這個資料型態也是一個佔用一個byte記憶體的整數值,不過定義的範圍是−128 到 127,因為他可以存取有帶負數的符號
所以第一個bit其實來表現數值的正負的,而0這個數在這裡被定義為正數因此第一個bit就是0(這裡的0和數學上的定義是不一樣的)
- Short 或者是 .NetFramework 中的 Int16 ,該型態佔用二個bytes記憶體空間,定義為從−32,768 到 32,767 的連續整數
- Integer 或者是 .NetFramework 中的 Int32 該型態佔用四個bytes記憶體空間,定義為從−2,147,483,648 到 2,147,483,647的連續整數
- Long 或者是 .NetFramework 中的 Int64 一個佔用8 bytes記憶體空間,範圍從−9,223,372,036,854,755,808 到 9,223,372,036,854,755,807
的連續整數
- UShort 一個佔用2 bytes記憶體的空間,範圍從 0 到 65,535 的連續整數
- UInteger 一個佔用 4 bytes記憶體的空間,範圍從 0 到 4,294,967,295 連續整數
- ULong 一個佔用 8 bytes記憶體的空間,範圍從 0 到 18,446,744,073,709,551,615 連續整數
- Single 一個佔用 4 bytes記憶體的空間,可表示負數−3.402823E38 到 −1.401298E-45 ,正數1.401298E-45 到 3.402823E38,0無法精準表示
,可以是非常小,但不是0
- Double 一個佔用 8 bytes記體空間,可表示負數−1.79769313486232E308 到 −4.94065645841247E-324
正數4.94065645841247E-324 到 1.79769313486232E308
小數運算一直是電腦的問題所在,因為在各個進位間無法進行完全的轉換,以下例子- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim x As Single
- x = 1 / 3
- MessageBox.Show(x * 100000)
- End Sub
複製代碼 顯示出33333.34 ,和我們的期望不合, 或許有人是可允許的,但實際上精度是差很多的
因此我們可能會利用double精度 ,還有一點是,如果你用小數來做迴圈的index計數,很容易出錯但會找不到錯誤,這種事就曾發生過
例如- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim x As Single
- Dim count As Integer
- x = 1
- While x < 1.00001
- x = x + 0.000001
- count += 1
- End While
- MessageBox.Show(count)
- End Sub
複製代碼 這應該要跑幾次
- Decimal 實際上這是一個佔用16 bytes 記憶體的數值,而且是一個以10為底的指數函數來進行比例調整,看起來太數學化了,舉個例子
- Option Strict On
- Option Explicit On
- Public Class Form1
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim a As Decimal = 5262.2358D
- Dim b As Decimal = 12.62354D
- Dim c As Decimal
- c = a * b
- MessageBox.show(c.ToString)
- End Sub
- End Class
複製代碼 實際上 a 這個數值 在指定為5262.2358時如果不加D那實際上是會以內定為double的型態來指定,而這樣的話就會發生型態沒有轉換而形成錯誤
,而且當編譯器開始時會將a乘上10的4次方變為52622358整數,一樣的12.62354會乘上10的5次方便為整數,再進行相乘,得到結果後再除於10的9次方來得到答案
- Boolean 布林, 不是true(-1) 就是 False(0)
- Date 日期
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim date1 As Date = #1/1/2010#
- Dim date2 As Date = #1/2/2010#
- MessageBox.Show((date2 - date1).ToString)
- End Sub
複製代碼 - Char 字元 其宣告方式和指定方式如下
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim x As Char = "a"c
- MessageBox.Show(x)
- End Sub
複製代碼 - String 字串
- 最後一種型態我們介紹一下,叫使用者自定型態,
這種型態經過了程式語言的幾次變革,最後終於確定了名稱
叫做類別,類別是物件導向的基礎,在WindowsForm中,你一定是在類別內寫程式- Public Class Form1
- End Class
複製代碼 對吧,你的程式碼是寫在Form1內別內
到了今天,幾乎沒有一種開發型的程式語言不是物件導向式的,我指的是各主要流行的程式語言而言
利如
c ---> c++ (c with class) ,這當然是二種不同語言
, .net 的所有開發語言應該都是(聽說有fortran,但不知有無支援)
當然,visual basic.net 和以前的visual basic6 已經完全不同,
那麼物件導向有何用處,為什麼是程式語言的流行趨勢
那是因為,物件導向使得我們寫程式的方式更為接近人類的思考模式
我們不用在去考慮那些散在各地的程式碼如何取得,或者是已經被我們遺忘的,只要是一看字面就可以知道如何使用
,因為他是參考人們在現實事界觀察事物得到的管理模式
例如,我們在問路時,通常被問的人會說,第幾個紅綠燈要左轉,這就是物件導向
第幾個紅綠燈就有紅綠燈和數字,你把數字和紅綠燈結合了就是你繼承了紅綠燈外加上一個編號
就這麼簡單,沒什麼神秘之處,再怎麼大型的程式碼,都還是由最小的單位組成,有著最簡單的細部
那麼我們把上面的程式改寫一下就變成了- Public Class Form1
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim 時鐘 As New 時鐘
- MessageBox.Show("現在時刻" & 時鐘.時 & "時" & 時鐘.分 & "分" & 時鐘.秒 & "秒")
- End Sub
- End Class
- Public Class 時鐘
- Inherits Object
- Public ReadOnly Property 時() As Integer
- Get
- Return Now.Hour
- End Get
- End Property
- Public ReadOnly Property 分() As Integer
- Get
- Return Now.Minute
- End Get
- End Property
- Public ReadOnly Property 秒() As Integer
- Get
- Return Now.Second
- End Get
- End Property
- End Class
複製代碼
|
|