问题有两个:
(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.   

    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  再加上负号,也就是-2583、同1道理,只是这次符号位是1,是负数,的用补码表示了。所以是:-16843010
    4、这个稍微有些不同,由于超过2个字节,所以系统会默认&HFEFEFE是Long类型,也就是4字节数据,但它只占用3个字节,所以最高字节是0,也就是说它是正数。所以&HFEFEFE=16711422
      

  2.   

    Long 数据类型
          
    Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647。Long 的类型声明字符为和号 (&)。
      

  3.   

    要了解这个,你就得学习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 varP
    End Sub以下内容摘自MSDN6
    Variant 数据类型
          Variant 数据类型是所有没被显式声明(用如 Dim、Private、Public 或 Static等语句)为其他类型变量的数据类型。Variant 数据类型并没有类型声明字符。Variant 是一种特殊的数据类型,除了定长 String 数据及用户定义类型外,可以包含任何种类的数据。Variant 也可以包含 Empty、Error、Nothing 及 Null等特殊值。可以用 VarType 函数或 TypeName 函数来决定如何处理 Variant 中的数据。数值数据可以是任何整型或实型数,负数时范围从 
    -1.797693134862315E308 到 -4.94066E-324,正数时则从 4.94066E-324 到 1.797693134862315E308。通常,数值 Variant 数据保持为其 Variant 中原来的数据类型。例如,如果把一个 Integer赋值给 Variant,则接下来的运算会把此 Variant 当成 Integer 来处理。然而,如果算术运数针对含 Byte、Integer、Long 或 Single 之一的Variant 执行,并当结果超过原来数据类型的正常范围时,则在 Variant 中的结果会提升到较大的数据类型。如 Byte 则提升到 Integer,Integer 则提升到 Long,而 Long和Single 则提升为 Double。当 Variant 变量中有 Currency、Decimal 及 Double 值超过它们各自的范围时,会发生错误。可以用 Variant 数据类型来替换任何数据类型,这样会更有适应性。如果 Variant 变量的内容是数字,它可以用字符串来表示数字或是用它实际的值来表示,这将由上下文来决定,例如:Dim MyVar As Variant
    MyVar = 98052在前面的例子中,MyVar 内有一实际值为 98052 的数值。像期望的那样,算术运算子可以对 Variant 变量运算,其中包含数值或能被解释为数值的字符串数据。如果用 + 运算子来将 MyVar 与其他含有数字的 Variant 或数值类型的变量相加,结果便是一算术和。Empty 值用来标记尚未初始化(给定初始值)的 Variant 变量。内含 Empty 的 Variant 在数值的上下文中表示 0,如果是用在字符串的上下文中则表示零长度的字符串 ("")。不应将 Empty 与 Null 弄混。Null 是表示 Variant 变量确实含有一个无效数据。在 Variant 中,Error 是用来指示在过程中出现错误时的特殊值。然而,不像对其他种类的错误那样,程序并不产生普通的应用程序级的错误处理。这可以让程序员,或应用程序本身,根据此错误值采取另外的行动。可以用 CVErr 函数将实数转换为错误值来产生 Error 值。
      

  4.   

    &hfefe& 最后的&表示该数据为Long类型,所以解释为正数
    &hfefe 没有最后的&,默认匹配为Integer类型,你的数值其最高位为1,所以解释为负数