VBA十六进制值相乘溢出问题咨询:&H100*&HBB报错而十进制运算正常
问题原因解析
- 十六进制字面量的默认类型限制:VBA中,
&H开头的十六进制字面量,只要值在16位Integer的范围(-32768 ~ 32767)内,就会被默认解析为Integer类型。&H100(256)和&HBB(187)都符合这个范围,所以二者都是Integer。当两个Integer相乘时,VBA会用Integer类型进行运算,而结果256*187=47872超过了Integer的最大值32767,直接触发溢出错误。 - 十进制表达式的类型提升逻辑:十进制写法里的
^是幂运算符,VBA对幂运算会自动将操作数提升为Double类型计算,16^2得到的是Double类型的256.0。后续和187相乘时,187会被自动转为Double类型参与运算,结果47872.0在Double的极大范围内,自然不会溢出。
解决方法(保留十六进制可读性)
如果要继续用十六进制写且避免溢出,有两种简单方式:
- 给十六进制字面量加
&后缀,强制指定为Long类型(32位,范围足够容纳结果):&H100& * &HBB& - 用类型转换函数显式转换:
CLng(&H100) * CLng(&HBB)
内容的提问来源于stack exchange,提问作者pdtcaskey
相关产品推荐
相关产品推荐

