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)如果你机器没事,请告诉我你的环境
...全文
396 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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里不能在定意的时候给它付值啊.这样写不对吧.

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧