Dim i As Long i = 3600 * 10 居然溢出??!!

zhangweiqiang 2003-12-24 02:06:39
Dim i As Long
i = 3600 * 10
上述代码运行时居然溢出,而若直接改成
Dim i As Long
i = 36000
再运行便没有事,这真是一件怪事,有谁知道是什么原因吗?(环境VB6+SP5)如果你机器没事,请告诉我你的环境
...全文
206 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
thriller 2003-12-24
msdn:
You attempt to use a number in a calculation, and that number is coerced into an integer, but the result is larger than an integer. For example:
Dim x As Long
x = 2000 * 365 ' Error: Overflow
回复
hspring 2003-12-24
两个整型的相乘当然还是整型的,你把它付给长整型的当然溢出了
这样可以
i=clng(3600)*clng(10)






回复
ahbbnimor 2003-12-24
up
回复
学学
回复
flyingZFX 2003-12-24
To Greaitm(夜草) ::
你从哪本VB书上看到的,,介绍给我呀,?
回复
Greaitm 2003-12-24
用& 而不要用CLng
因为你的参数中用了&,vb编译器就会使用长整的寄存器(vb会根据代码查找最长的变量,并设置寄存器),但如果你用Clng的话,就变成初始化时是整数,然后再转换成长整,这样不科学。
回复
蜗牛20008 2003-12-24
Dim i As Long
i = 3600& * 10&
--------------------
&means long
回复
tonyLonge 2003-12-24
很同意楼上的liuyanghe111(yang) 说法


Dim i As Long
i = 3600 * 10
改成
Dim i As Long
i = CLng(3600) * CLng(10) 就对了.
回复
Greaitm 2003-12-24
i = 3600& * 10

就可以了
回复
liuyanghe111 2003-12-24
因为在表达式中,3600和10都是默认为int型的,系统会将3600*10的结果填充到int型的内存空间中,而36000>32767,所以溢出
回复
IT服务 2003-12-24
VB里不能在定意的时候给它付值啊.这样写不对吧.
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7453

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告