VB语言关于long长整型溢出的问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 09:51:01
Dim s as long
s=16384 * 2
print s

为什么产生了溢出?谢谢指导!
可是如下三个都没有溢出。
s=190^2
s=4*0.5*16384
s=32768*2
又是什么原因呢?

32*1024=Overflow(溢出)?
●32×1024为什么不是32768而是Overflow(溢出)这个结果?这个问题要从资料形态开始讲起,当我们设定一个变量为整数时,程序会向作业
系统要求2Byte(32bits)来存放资料,其可存放的范围为-32768 ~ +32767(在VB时),当数值超过这个范围时,因内存空间已固定为2Byte,无
法法再增加,在C语言里只取2Byte,而VB会造成溢出现象而停止程序执行。
例如:
Private Sub command1_Click()
Dim A As Integer
A = 32768
End Sub
●结果执行时会溢出
Private Sub command1_Click()
Dim B As Integer
A = -32769
End Sub
●结果执行时会溢出
Private Sub command1_Click()
Dim C As Long
C = 32 * 1024
End Sub
●结果会如何?答案依然是溢出。因为VB在做数值运算时,会先开一个内存地址来存放计算结果,然后在传送到你指定的变量里,如上一个程
序,变量C虽然是长整数,其可存放数值范围为-2,147,483,648 ~ +2,147,483,647,但VB作计算时,将32判断成整数,1024 也判断成整数,
就任意在某个位置的内存上开启 2Byte大小来存放32×1024的值再回存至变量C,但32×1024已超过任意在某个地址的内存2Byte的大小,故溢
出。
●同理,C = -32768 - 1与 C = 32767 + 1 都也会溢出。
Private Sub command1_Click()
Dim C As Long
C = 32 * 32768
End Sub
●结果会如何?答案是1048576。为什么计算又变正常呢,因为VB在做此数值运算时,将32判断为整数,因为32768超过整数的范围