那么,如何获取正确的长整数结果呢?只能通过定义长整型变量,对这个16位数先转换为负数,在求补码的方式进行调整了。算法如下:
dim n as long ‘如果定义为 Integer ,就会遭遇溢出错误
n=val("&H8C48") ’此时结果为 n=-29624,是因为 val 函数的范围是16位
n=n+&H10000 '求负数的16位补码, n=35912
‘此时在用Hex函数,可以获取正确的十六进制结果
debug.print hex(n) -->结果为8C48
3. 以&HXXXX形式表示的十六进制立即数的使用,如果第一位是8XXX,则同样会认定为负数。示例如下:
dim m as long
m=1
if m>= &H8000 then m=m-&H8000
debug.print m
此时,m的值应该是多少呢?
你或许想得到的值是 m=1,实际上,你的m值是 32769(&H8001)
如何修改呢? 把 &H8000 拆分为 &H7FFF +1,语句变化为:
if m>&H7FFF then m=m-&H7FFF-1
这时你就可以得到你想要的结果了。