我正在研究VBA函数中的错误,然后发现了(&HFFFF00 And &HFF00) = &HFFFF00

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

我想念什么?

最佳答案

我想到了。


第一个值&HFFFF00太大,无法容纳16位,因此自动为Long
第二个值&HFF00确实适合16位,因此它是一个整数,它是一个有符号整数


尝试Debug.Print &HFF00, &HFF00&,您将看到-256 65280。第一个值是带符号的整数,第二个值由&后缀强制为长(带符号)。

显然,VBA通过将值尽可能存储为16位,并在表达式求值过程中将其转换为32位时保留它们来使情况混乱。

为了使操作正常进行,您需要使用&后缀强制常数变长。

关于excel - 为什么(&HFFFF00和&HFF00)=&HFFFF00?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57718221/

10-10 14:32