Private Sub Command1_Click()
    Dim a
    a = 256 * 256
End Sub上面代码运行老是提示溢出错误,为什么啊?
麻烦知道朋友解答一下啊。
上面运算a=65536,才65536怎么老是提示溢出啊,
就是a=90000这样都没有错误啊,为什么两个数相乘就会提示溢出啊?

解决方案 »

  1.   

    就是Dim a as Double 或 dim a as long 这样都照样溢出啊?怎么回事啊?
    我试过了,两个数的乘积<32767就不会溢出,大于就会溢出。为什么呢?我都定义
    Double 或long 都不行的。
      

  2.   

    就是Dim a as Double 或 dim a as long 这样都照样溢出啊?怎么回事啊?
    我试过了,两个数的乘积<32767就不会溢出,大于就会溢出。为什么呢?我都定义
    Double 或long 都不行的。
      

  3.   

    Private Sub Command1_Click()
        Dim a As Long
        a = 256& * 256
    End Sub
    Private Sub Command1_Click()
        Dim a As Long
        Dim b As Long
        b = 256
        a = b * 256
    End Sub
      

  4.   

    默认情况下256是Integer类型,整型的范围是:-32768~32767,所以256×256=66536肯定是溢出的你要这样写:
    Private Sub Command1_Click()
      Dim a as long
      a = 256& * 256
    End Sub
    第一个256后面的&,表示这个256是Long类型的数据
      

  5.   

    试试这个:
      Dim a
      a = 256# * 256
      MsgBox "A的长度是: " & LenB(a) & ", A的值是: " & a个人的理解是这样的:
    a是一个变体,
    解释器在解释到 Dim a 这一行的时候,并不知道你会为它赋什么类型的右值
    到了下一行,它看到右侧的表达式是一个 integer * integer,
    于是分配2个字节的内存。
    而65536,八进制表示为:200000
    至少需要6个字节,产生溢出错误!
      

  6.   

    我再测试了一下,发现其实是计算的过程中解释器内部溢出了,而非在赋值的过程:请看:Private Sub Form_Load()
       Call func(256 * 256)
    End Sub
    Private Function func(ByVal v As Double)End Function
    尽管函数func中参数v是double,却还是溢出。
    那么个人推断,产生溢出的地方,其实是在解释器内部!
    它为保存integer * integer 乘法计算结果分配的内存不够。网友可能知道,
    operator * 其实是一个函数。
    C++中函数声明如果是:
    int operator * ( int & val1, int & val2);
    正好吻合这里的溢出错误!