VB/VBA的无符号整数,高阶应用之基础 您所在的位置:网站首页 vba整型变量符号 VB/VBA的无符号整数,高阶应用之基础

VB/VBA的无符号整数,高阶应用之基础

2024-01-02 11:31| 来源: 网络整理| 查看: 265

0 分享至

用微信扫码二维码

分享至好友和朋友圈

前言

在《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的范围。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

/阅读下一篇/ 返回网易首页 下载网易新闻客户端


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有