永发信息网

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

答案:2  悬赏:10  手机版
解决时间 2021-12-01 02:59
VB语言关于long长整型溢出的问题
最佳答案
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超过整数的范围,因为判断
成长整数,就任意在某个位址的内存上开启 4Byte大小来存放32×1024的值再回存至变量C,因此32×32768可以正常计算。
●怎么解决溢出问题呢?答案就是转换变量的类型,如下:
Private Sub command1_Click()
Dim D As Long
D = CDec(32) * CDec(1024) '转成十进制
D = CDec(-32768) - CDec(1) '转成十进制
D = CLng(32) * CLng(1024) '转成工整数
D = CLng(32767) + CLng(1) '转成长整数
End Sub
全部回答
程序改成如下,就不会有错误了:
Dim s As Long
s = 16384
s = s * 2
Print s
原因是:因为VB两个常数相乘,默认将常数放在Integer中,所以这个问题一定要注意,避免产生不必要的BUG
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
sos可以用什么数字来表示呢?
Not only give people relaxation and pleas
2017年七月17、18、19三天人民币兑澳元
购房指南:买房前,你该了解的购房需求!
39x36该怎么算还怎么验算
河南娶一个媳妇彩礼多少钱
太原到杭州经过多少个省?k908
价内税?价外税?
请问德赛西威怎么与苹果手机互联?详细点!谢
日语呐尼喔一得 翻译
呵宝推车可以拆下来冼吗
钦州市食品行业协会培训中心地址在什么地方,
山东济宁地区10元内最好吸的烟有哪几种?求烟
上海有没有什么门票畅饮酒吧
我相信我不会是个庸人翻译成文言文
推荐资讯
加盟红豆居家怎么样?
看图猜成语三个物三个误三个务的图片答案是什
铁板长1米X宽1米X厚度6毫米计算重量
黑森林蛋糕胚的做法
点痦子有危险么?比如毁容,比如长的更多了!
大家好,我的玖富万卡额度73200,我全部借款
单选题植物生长素对植物的新陈代谢和生长发育
有没有人喜欢况复生的,他现在好帅呀,111
纵我深情,予我深拥,这个网名什么意思
良姜与干姜的区别
黄冈地区科目二考些什么?
广州废品回收公司广州地区有哪些废品回收公司
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?