level 9
下面的两个式子等效吗?
Private Const AVAR As Long = &H8000
Private Const AVAR = &H8000&
答案是不一样。
我一直以为第一个更正规,偷懒的才用第二个。找了一天才找到问题,要了命了。
2025年08月14日 02点08分
1
level 12
只是&H8000和&H8000&不一样
&H8000在被赋值到常量之前就已经被定性为2字节整数-32768
而&H8000&会被定性为4字节整数32768
2025年08月14日 05点08分
2
对呀,但是这个很多人注意不到。我从网上找的计算Hash的例子,还有位运算的例子,全是错的,这样的问题很难发现。
2025年08月14日 05点08分
@klimaa 所以vb的16进制常量如果期望值是4字节最好后面加上&
2025年08月14日 05点08分
这不算啥,VB6最恶心的是当年&HXXXXX超过5位数的时候,它🐕☀又会强行给你把&去掉,当你后面要改成4位数的时候又很容易忘记把&加回来。
2025年08月21日 01点08分
@yjryym 哈哈,重新看贴子才想明白你说的意思,这个的确更恶心
2025年09月12日 00点09分
level 15
VB6的默认整数类型是2字节的Integer,所以4位的十六进制数&H8000~&HFFFF会被当成负数处理,要在后面加&变成Long型才是正数
2025年08月14日 13点08分
3
原来如此。我重新搜索了我以前的程序,好在大部分都发现了问题改对了。
2025年08月15日 00点08分
Integer和Long类型的区分能理解,但™VB6最恶心的是当你&HXXXXX超过5位数的时候,它🐕☀又会强行给你把末尾&去掉,当你后面要改成4位数的时候又很容易忘记把&加回来。
2025年08月21日 01点08分
@yjryym 上一处当你写成了当年,我还想说现在也一样呢。
2025年08月22日 00点08分
@klimaa 哈哈哈,复制粘贴过来的时候发现了,就改了
2025年09月18日 00点09分
level 6
自己写的时候,尽量不用 const,避免意外发生。
2025年09月10日 09点09分
4
问题的关键不是Const,而是十六进制数
2025年09月10日 13点09分
@sevk 你是没搞懂问题 dim i as long i=&H8000 你试试i是=?,就是跟你预想的不一样
2025年09月11日 09点09分
@sevk 但凡你仔细看看帖子你也应该明白问题的关键到底是啥……其实是&H8000和&H8000&这两者不相等的问题
2025年09月11日 12点09分
level 1
笑点解析:&H8000 = -32768,&H8000& = 32768
所以:
Private Const AVAR As Long = &H8000 ‘-> AVAR = -32768
Private Const AVAR = &H8000& '-> AVAR = 32768
2026年02月13日 08点02分
5