VBA中Long类型含第15位(最高有效位)时按位与运算异常问题
VBA Long类型按位与运算异常的解决方案
问题根源
你碰到的是VBA按位运算的符号扩展问题:&H8000属于16位有符号整数(Integer类型)的最小值(对应十进制-32768),当它参与Long类型的按位运算时,VBA会自动将其符号扩展为32位Long类型,即变成&HFFFF8000。此时与&H44332211执行按位与,结果就会保留原数的高16位,得到&H44330000,而非预期的&H0。
可行解决方案
1. 强制掩码为Long类型
给掩码值加上&后缀,直接将其声明为32位Long类型,避免符号扩展:
? Hex(&H44332211 And &H00008000&) 0
也可以用CLng显式转换:
? Hex(&H44332211 And CLng(&H8000)) 0
2. 改用LongLong类型(仅64位Office支持)
在64位Office环境中,使用64位的LongLong类型进行运算,从根源规避16位符号扩展问题:
? Hex(CLngLng(&H44332211) And CLngLng(&H8000)) 0
3. 手动清除高16位(全版本兼容)
如果需要兼容32位和64位Office,可以在运算后手动清除高16位,或直接构造无歧义的32位掩码:
' 运算后清除高16位 ? Hex((&H44332211 And &H8000) And &HFFFF) 0 ' 直接使用完整32位掩码 ? Hex(&H44332211 And &H00008000) 0
内容的提问来源于stack exchange,提问作者raz
相关产品推荐
相关产品推荐

