请问 我想在程序里表示一个数如59645 我把它用16进制的表示成 &HE8FD,为什么程序运行时它的值不是59645,而是-5891呢,该如何解决呢?先谢过了!

解决方案 »

  1.   

    因为保存他的变量是integer型,的59645超出了数值范围了。修改了他的符号位,就变负了。
    解决就是用long型的来保存,你试试看?
      

  2.   

    ? cint("&HE8FD")
    -5891 
    ? clng("&HE8FD")
     59645 
      

  3.   

    const myconstval as long = &HE8FD
      

  4.   

    &HE8FD&可以,能给我讲讲原因吗?
      

  5.   

    &后缀表示Long型,直接定义Long型常数
    而const myconstval as long = &HE8FD 是把Integer(默认的)常数转为Long型,也是可以的
      

  6.   

    Sorry,糊涂了,我机子上没有VB,也没法试
    const myconstval as long = &HE8FD不可以吧?
    &HE8FD本身已经是个负数了
      

  7.   

    我试过,const myconstval as long = &HE8FD 是不可以的那如果我想表示一个更大的数如FFF91FBAh该怎么办?还有后面的&表示long型,那前面的&代表什么,我vb比较弱呵呵,望解答。
      

  8.   

    那前面的&代表什么
    ============
    和h 一起,“&HXXXX” 表示十六进制。 
    那const myconstval as long = "&HE8FD" 为什么又可以呢???
      

  9.   

    const myconstval as long = "&HE8FD"是可以,
    但const myconstval as double= "&HFFFFE8FD"又不行了 
    不解中,请高手指点。
      

  10.   

    适当范围内的数字,前缀以 &H,可以直接表示十六进制数字
    VB的隐式类型转换和Hex()函数都是基于Long型的
    &HFFFFE8FD=4,294,961,405
    长整型的范围是-2,147,483,648 到 2,147,483,647不知道我的理解对不对呢
      

  11.   

    有道理,可是现在由于&HFFFFE8FD超出范围,在程序里表示为一个负数,如果想让它表示成一个正数4,294,961,405,该怎么写呢?
      

  12.   

    多谢楼上了,我想定义一个常量,如果用十进制来定义如:const myconstval as double=4294961405 就可以
    但我现在想用十六进制来定义  即想用&HFFFFE8FD来代替4294961405 ,如写成const myconstval as double=&HFFFFE8FD的话,在程序里myconstval就变成了负数,该如何解决这个问题呢?
      

  13.   

    因为&HFFFFE8FD超出了VB6能接受的16进制(长整型)的范围,所以
    无法使用VB6的任何隐式或显式的方式将它转换成数值(Long或Double)
    我能想到的方法是自己封装一个转换函数
    public function MyHexToDbl(ByVal strHex as string) as Double
    将16进制数作为字符串传入
    自己写一个转换为Double值的算法输出
    FFFFE8FD=15*16^7+15*16^6+15*16^5+15*16^4+14*16^3+8*16^2+15*16^1+13*16^0=4294961405
    算法就不写了
    之后:Const myconstHexString as  string="&HFFFFE8FD"
          dim mydblVal as double
          mydblVal =myhextodbl(myconstHexString )
    因为楼主对这个常量的用途没有作更多的解释
    所以暂时只能想到这个蠢办法
      

  14.   

    常量只是作为一个验证功能,比如说内存中有一段数据,把它取出来如果等于myconstHexString,就做些事,不等就做别的
    if ********=myconstHexString then
     ...
    else
     ...
    end if
    就这样
    其实写成const myconstHexString as double=4294961405# 就可以达到这个目的,我只是想知道是否有方便的办法可以用十六进制声明这个常量。