有点怪!

lzliming 2000-05-30 04:27:00
在VB下,
dim hhh as long

hhh = 210 * 256
运行时,报实时错误‘6’

将其改为
hhh = 210 * 256 ^ 1

运行通过。

????

...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
江王 2000-05-30
  • 打赏
  • 举报
回复
这可算是VB的一个Bug, 它可能是将210看作一integer类型,256也看作一个integer类型,两者乘为53760, 而integer类型范围为-32768 至 32767。编译器将Integer*Integer类型的结果用Integer的中间变量来存储,自然就溢出了。
但这种情况可以避免,如:hhh= 210& * 256&
Asima 2000-05-30
  • 打赏
  • 举报
回复
对了,我应该说清楚的CLng()是强制转换为Long类型的函数
所以hhh=211*CLng(256)相当于Integer类型和Long类型相乘
结果也是Long类型,所以没有溢出
Asima 2000-05-30
  • 打赏
  • 举报
回复
*运算的结果的数据类型是参与运算的数据类型中精度最高的数据类型
因为211和256都是Integer类型
所以211*256结果仍是Integer类型
但是结果是53760,而Integer类型的范围是-32768到+32767
所以溢出了
你用211*256^1时,256^1返回的是Double
Byte、 Integer、Long、Single、Currency、Double 和 Decimal的精度依次增加
所以Double的精度高,211*256^1的结果的数据类型是Double
Double 数据类型的范围是
-1.79769313486232E308 到 -4.94065645841247E-324,
和4.94065645841247E-324 到 1.79769313486232E308。
所以结果不会溢出

其实你只要用CLng()就可以解决问题
hhh = 210 * CLng(256)就可以



7,759

社区成员

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

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