cherrycdh 发表于 2021-4-9 14:23

在vba中关于long和integer的区别

大家好,我在学习全民一起vba提高篇,现在学到第四回,日期类
然后我在学习过程中遇到了一个问题,就是老师在返回某个年月日中的年时,有这样一串代码他的数据定义的是long,
Sub demo4()
    Dim a As Date, b As Long
    a = #2/19/2011 1:50:30 PM#
    b = Year(a)
    MsgBox b
End Sub但是他之前在视频当中说过,integer最长可以+-3万,而年的话最多是9999年,基于这样的定位
我在编写的时候是写的
Sub demo4()
    Dim a As Date, b As Integer
    a = #2/19/2011 1:50:30 PM#
    b = Year(a)
    MsgBox b
End Sub

我想知道,在这个代码下面,使用long和integer有什么区别,他也没有说他为什么用long,所以我不知道使用long和使用integer是否是无所谓的

苏紫方璇 发表于 2021-4-9 15:37

在你的代码里long和integer是一样的,不存在溢出的情况

无闻无问 发表于 2021-4-9 15:50

integer无符号正负21亿左右,超过还是long较好

c03xp 发表于 2021-4-9 16:02

8位有符号数    11111111 值为-1
16位有符号数11111111 值为255

cherrycdh 发表于 2021-4-9 16:08

苏紫方璇 发表于 2021-4-9 15:37
在你的代码里long和integer是一样的,不存在溢出的情况

其实就是说,按照正规情况的话,我这串代码是否使用integer比用long来说是更合适的呢:lol,因为是初学者,所以有点死脑筋

苏紫方璇 发表于 2021-4-9 17:47

cherrycdh 发表于 2021-4-9 16:08
其实就是说,按照正规情况的话,我这串代码是否使用integer比用long来说是更合适的呢,因为是初学者 ...

真要对比的话,我觉得integer确实更合适,区间够用,而且比long占用内存更小。原来学vb的时候我也喜欢用long,long比integer短3个字母,而且基本不用考虑溢出问题

黄英拜 发表于 2021-4-9 23:08

声明为Interger表面看是节约了系统内存,其实不是,因为现在的计算机系统至少都是32位的系统,32位的含义是它在执行计算时,标准字长(可以理解为最小处理单位)就是4个字节(每个字节8位,总共32位)。所以就算你给它一个2字节数据,它也要耗用4个字节的运算资源来处理。由于这个原因,VBA在执行声明为Integer类型(2字节)的变量时会全部转换成Long类型(4字节)的变量然后再执行计算。所以,声明Integer类型不会节省内存,反而降低效率。

cherrycdh 发表于 2021-4-12 10:13

黄英拜 发表于 2021-4-9 23:08
声明为Interger表面看是节约了系统内存,其实不是,因为现在的计算机系统至少都是32位的系统,32位的含义是 ...

明白了,你这样一讲茅塞顿开,十分感谢:loveliness:
页: [1]
查看完整版本: 在vba中关于long和integer的区别