为什么 (1)&hfefe& = 65278 而 &hfefe = -258 (2) &hfefefefe& = -16843010 而
问题有两个:
(1)&hfefe& = 65278 而 &hfefe = -258
(2) &hfefefefe& = -16843010 而 &hfefefe = 16711422
详细代码如下:
Debug.Print (" &hfefe& = " & Val("&h" & "fefe&") & " 而 &hfefe = " & Val("&hfefe") & " " _
& Chr(13) & Chr(13) & " &hfefefefe& = " & Val("&hfefefefe&") & " 而 &hfefefe = " & Val("&hfefefe")) & " "
[解决办法]
数据类型不一样啊。很正常
[解决办法]
1、&HFEFE& 中的最后一个& 定义了这个数据时一个Long类型,也就是4个字节,化作二进制数据:
00000000 00000000 11111110 11111110 ;符号位是:0,也就是正数,所以&HFEFE&就是:65278
2、&HFEFE 没有显式的声明他是什么类型,依据VB的隐形类型定义,&HFEFE占用2个字节,也就是Integer类型的变量,化作二进制是:11111110 11111110 ;符号位是:1, 是负数,负数再计算机中的表示是补码,也就是:&HFFFF-&HFEFE+1=&H102=258 再加上负号,也就是-258
3、同1道理,只是这次符号位是1,是负数,的用补码表示了。所以是:-16843010
4、这个稍微有些不同,由于超过2个字节,所以系统会默认&HFEFEFE是Long类型,也就是4字节数据,但它只占用3个字节,所以最高字节是0,也就是说它是正数。所以&HFEFEFE=16711422
[解决办法]
Long 数据类型
Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647。Long 的类型声明字符为和号 (&)。
[解决办法]
要了解这个,你就得学习Varaint类型,变体类型。
这个类型功能强大,它会自动给你转换成相应的类型,做数据处理
Option ExplicitPrivate Sub Command1_Click() Dim varP As Variant varP = &HFEFE& Debug.Print varP varP = &HFEFE Debug.Print varP varP = &HFEFEFEFE Debug.Print varP varP = &HFEFEFE Debug.Print varPEnd Sub
[解决办法]
&hfefe& 最后的&表示该数据为Long类型,所以解释为正数
&hfefe 没有最后的&,默认匹配为Integer类型,你的数值其最高位为1,所以解释为负数