| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 412 人关注过本帖
标题:有没有学c#的,讨论一下溢出问题,很有意思,二者对比一下.
只看楼主 加入收藏
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
结帖率:86.25%
收藏
 问题点数:0 回复次数:4 
有没有学c#的,讨论一下溢出问题,很有意思,二者对比一下.
有没有学c#的,讨论一下溢出问题,很有意思,二者对比一下.
--------------------
这个问题,我查过贴子,以前好象论论过,在VB 中,下面的代码会提示溢出的
Private Sub Command1_Click()
Dim val1 As Integer
Dim val2 As Double
val1 = 32767
   '以下这句会提示溢出,因为32768已经超出integer的范围了.
   '当然,我知道,将其改成:val2 = clng(val1) + 1 就
   '不会溢出了,但是我不改,我就是为了说明问题
val2 = val1 + 1
MsgBox val2
End Sub

以上代码中,val1的值是32767,加上1,便是32768了,正好超出integer的取值范围(-32768~+32767)
但是它并没有超出左边 val2的范围呀,val2可是声明的long型呀。
我认为这是VB设计的不合理之处。
同样的情况,在C#下是不会存在的。
因为在c#中,short型与VB中的integer型的取值范围完全相同,代码如下,做一下类比

static void Main(string[] args)
{
short val1 = 32767;
int val2;
    //以下这一句是不会提示溢出的
val2 = val1 + 1;
Console.WriteLine(val2);
Console.ReadKey();

}
2007-10-07 22:37
浅色的回忆
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2007-6-24
收藏
得分:0 

大哥,这里好像是VB6也


2007-10-08 00:55
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 
回复:(ggyy66)有没有学c#的,讨论一下溢出问题,很有...
+ 運算符規則
result = n1 + n2
取 n1, n2 最高精度的範圍

Dim i As Integer, k As Long
i = 32767
k = CLng(i)+1 ' long
' 或者 k = i + 1& ' long
都不會溢出了
------------
規則不同

原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2007-10-08 03:47
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
收藏
得分:0 

大哥,这里好像是VB6也
-----------------
你不要只看标题,不看内容呀.如果你看过我贴子的内容,你就不这样说了.


2007-10-08 07:52
半空烟雨
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-10-4
收藏
得分:0 

还是vb6啊 大家都知道
vb.net已经修正这个问题


2007-10-08 08:13
快速回复:有没有学c#的,讨论一下溢出问题,很有意思,二者对比一下.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015899 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved