首页 > 解决方案 > 为什么 (&HFFFF00 和 &HFF00) = &HFFFF00?

问题描述

我正在调查 VBA 函数中的一个错误,我发现了(&HFFFF00 And &HFF00) = &HFFFF00.

我希望得到不同的结果:(&HFFFF00 And &HFF00) = &HFF00.

我错过了什么?

标签: excelvbahex

解决方案


我想到了。

  • 第一个值&HFFFF00太大而无法放入 16 位,因此它自动为 Long
  • 第二个值&HFF00确实适合 16 位,所以它是一个整数,即有符号整数

试试看Debug.Print &HFF00, &HFF00&,你会看到-256 65280的。第一个值是有符号整数,第二个值被&后缀强制为(有符号)长整数。

显然,VBA 在可能的情况下将值存储为 16 位,并在表达式评估期间转换为 32 位时将它们处理掉,从而造成了混乱。

为了使操作起作用,您需要使用&后缀将常量强制为 long。


推荐阅读