但计算机的发展过程中,最终选择了有利于<em>CPU</em>设计的二进制,因此计算机只认二进制。因为16进制和8进制可以非常容易地转换为2进制,所以16进制和8进制就是衔接机器二进制与人类10进制的桥梁,不仅代表着10进制的2进制
2021-05-16 11:30:29
前言
在《VB的整數,你真的瞭解?》中,給大家介紹了VB中的數值類型除了Byte是無符號的,Integer,Single,Long,Double,Date,Currency都是有符號的。儘管這與VB的實用場景有莫大關係,但是作為一門開發語言,沒有無符號整數,是極為不方便,也是不科學的。
比如在處理ASM時,常常會遇到各種短跳,這時可能需要Byte類型的有符號類型。在進行算術運算時,也同樣需要無符號類型。比如2^31+1,按無符號是個正整數,按有符號至少也可用負數來表示吧,但對於Long類型的變數,直接就溢位了。
在《VB/VBA,請讓我點名表揚你》、《Variant構造智慧指針,撒歡了玩》等系列文章中,介紹了VB的強大,作者甚至認為VB就是VC的桌面定製版本。要說VB連無符號整數都不支援,那還如何強大?所以說,這是不可能的,本文就將給大家詳細分析VB中的無符號整數及其應用。
一、有符號和無符號的區別與聯絡
其實在《VB的整數,你真的瞭解?》裡也已給大家說了,二者在儲存層面是完全一致的,區別在於變數機制如何解釋最高Bit位。若解釋為符號位,則為有符號整數,若不解釋為符號位則為無符號整數。VB中恰巧將Byte類型的最高位不解釋為符號位,而將其他整數類型的最高位解釋為符號位。
藉助位運算和指針,從儲存角度進行處理,就可以自己解釋最高位了。但對於VB而言,這樣無疑提高了難度,顯然與VB的易用和任性風格不搭調。那有沒有VB風格的無符號整數呢?肯定是有的,但這之前需要了解VB中的進位制和端序(可閱讀《VB/VBA儲存的端序》瞭解)。
二、VB中的進位制與無符號整數
VB/VBA中提供了三種進位制,即:10進位制、16進位制和8進位制。10進位制與人的思維緊密相關,這在《新手學程式設計|系統和語言誰先有?面向過程會淘汰?》中有充分的描述。通常在編碼時,使用10進位制,可以讓程式碼更易於閱讀和維護。但計算機的發展過程中,最終選擇了有利於CPU設計的二進位制,因此計算機只認二進位制。
因為16進位制和8進位制可以非常容易地轉換為2進位制,所以16進位制和8進位制就是銜接機器二進位制與人類10進位制的橋樑,不僅代表著10進位制的2進位制儲存結構,也更易於與計算機打交道(標記、儲存)。在《知VBA的浮點數結構,更懂礦機裝顯示卡》中,更是指出在計算機的世界裡,萬物皆整數。因此,使用16進位制和8進位制,就可以巧妙地藉助2進位制的儲存結構獲得無符號整數。
三、VB中的進位制轉換和表示
VB/VBA中同樣提供了10進位制與16進位制和8進位制之間的轉換函數,其中Hex函數將10進位制轉換為16進位制,Oct函數將10進位制轉換為8進位制。但有以下需要注意:
1、這兩函數轉換的10進位制,是整數。若轉換小數,則會將小數四捨五入取整後再轉換。如Hex(1.4)=1,Hex(1.5)=2,Oct(1.4)=1,Oct(1.5)=2。
2、被轉換的是有符號整數,若要超出有符號範圍,可使用相應的負數。如想獲得短整型數值65534的16進位制,可使用Hex(-2)。
3、轉換的結果是小端序的字元串類型,與整數的大端序差了點意思,也就是說轉換結果不是正整數。
既然VB中10進位制轉換為16進位制或8進位制後,連正整數都不是,又如何借其使用無符號整數呢?這就要說起16進位制和8進位制整數在VB/VBA中是如何表示的了。
在VB/VBA中通過「&H」與前述轉換的16進位制字元串連線,來表示16進位制整數,如「&HFFFE」。通過「&0」與前述8進位制字元串連線,來表示8進位制整數,如「&0177776」。如此一來,小端序變大端序,無符號整數就誕生了。
不過需要注意,"&"在較早版本的VB中是Long資料類型修飾符,這一規則在後續版本中得以保留。事實也證明,「&H」和「&0」修飾的16進位制和8進位制的無符號整數範圍不會超過4位元組無符號Long的範圍。
<點選頭像加關注,更多VB/VBA精彩內容等你來哦>
相關文章
但计算机的发展过程中,最终选择了有利于<em>CPU</em>设计的二进制,因此计算机只认二进制。因为16进制和8进制可以非常容易地转换为2进制,所以16进制和8进制就是衔接机器二进制与人类10进制的桥梁,不仅代表着10进制的2进制
2021-05-16 11:30:29
根据外媒 phonearena 消息,今日 YouTube 频道 FRONT PAGE TECH 发布了一段视频,展现了未发布的 <em>Android</em> 12 实机演示,其动画效果相比此前版本有了很大的变化。系统通知、计算器、输入法等界面均有了大改,更
2021-05-16 11:00:31
<em>苹果手机</em>流畅耐用一直是各大手机厂家追求与努力方向,这几年小米晒跑分、华为直接承诺多长时间不卡顿,都是想告诉消费者安卓也流畅好用了。当然事实远不是说说而已,还需具体的产品实际表现来证明。曾经号称“两
2021-05-16 11:00:13
摩尔定律下<em>CPU</em>、存储器、逻辑芯片的尺寸越来越小 来源:电气与电子工程师协会 50多年来,半导体产业大体沿着摩尔定律在发展,但速度已有所放缓,且已逼近硅材料的物理极限。以台积电为例,2018年4月,其实现了7纳
2021-05-16 10:30:42
苹果的每一代产品,都能给我们带来一定的惊喜,就拿去年度<em>iPhone</em> 12来讲,这款手机在上市之后更是是给了我们一个大大的惊喜,凭借着<em>iPhone</em>12,苹果再次创作出了销量神话,库克也是乐得合不拢嘴。<em>iPhone</e
2021-05-16 10:30:02
对事主手机内的涉案短信、微信、通话记录等提取固定;对事主用于网银转账的电脑进行鉴定,对其中网银账户登录及操作过程进行固定,同时通过技术溯源查找、确定接收事主转账的银行账户使用网银登录时的IP地址、网转设备<
2021-05-16 10:01:42