String、Variant、Array等都是各位VB人士的坐上嘉賓,尤其是字串,打遍各大應用場景。最近看到有人介紹說,這些型別都是結構體,理解後使用指標,可極大提升程式碼效率,這讓人匪夷所思,同時也充滿好奇。搜了VBA的圈子,提這個的太少了,也沒弄懂咋回事。究竟是怎樣的呢?跪求知道的大佬,能詳細介紹下麼?
回覆列表
-
1 # BtOfficer
一、先說整數
整數型別包括Byte、Boolean、Integer、Long和Currency。其記憶體結構很簡單,定義的是多少Bits就是多少Bits。唯一需要強調的是,最高位作為符號位,就是有符號的,不作為符號位,那就是無符號的。
1、Byte型別
Byte型別表示1個位元組,這是記憶體地址劃分的最小顆粒度。該型別是VB中唯一的無符號型別。如果按有符號來看,0-127是正數,128-255是負數。從VB的應用場景來看,負數確實沒有什麼意義,誰會用這麼小的負數呢?但在VB的高階應用中,使用Byte型別的有符號型別,幾乎是必備項。
VB有該型別的陣列,理論上可支援任何結構的資料型別。
2、Boolean型別
布林型別,佔2位元組,在計算機裡幾乎是通用的。VB中的True常量被定義為-1(所有Bit位都為1),這與通用的非零定義,有細微的差異。事實上VB使用通用意義上的定義,有助於提升VB程式碼的簡潔和高效。但VB使用者在比較表示式中,應對布林變數的通用定義保持謹慎。
例如:”If num then”通常比”If num<>0 then”更簡潔高效,但”If num=True then”就會犯致命錯誤。
思考, Boolean為什麼使用2位元組?按定義使用使用1Bit足矣。
3、Integer型別
Integer型別,佔2位元組,有符號。值得一提的是,該型別與VB字串型別有直接的關係。另外Office07以前,很多設定都跟這個型別有關,最出名的恐怕要算Excel中的行數了。很多VBA的朋友研究分表技術,甚至疫情期間,英國還鬧了統計資料超行溢位的笑話,其實就跟軟體使用了該型別有關。
那為啥不使用4位元組的Long呢?理想很豐滿,現實卻是,在計算機的發展過程中,很多都是走一步看一步,得過且過很多時候是常態。ANSI到Unicode,郵件裡的7Bit到Base64,千年蟲問題,時間戳等,比比皆是。
4、Long型別
佔2位元組,有符號。這是32位機裡使用最普遍的型別了。指標、控制代碼等,很多型別都可揉到這個型別裡。VB後續的高階應用裡,幾乎都離不開該型別。
5、Currency型別
Currency型別很特殊,雖然表現形式上是有4位定點小數,但其儲存上卻是整數型別。所以,在VB裡,Currency型別,其實就是LongLong型別啦。說VB沒有大整數的,可以休矣。
更多詳情,可閱讀《VB的整數,你真的瞭解?》,VB變數擴充套件知識,請參閱《VB的任性,從Variant開始 》、《變數,還有這些秘密 》和《VB的天地,橫看成嶺側成峰 》以及後續文章。