首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

结果为何为一个莫名其妙的负数

2012-10-23 
结果为什么为一个莫名其妙的负数?C# code Int64 MaxSN DateTime.Now.Year * (Int64)1000000000 计算正

结果为什么为一个莫名其妙的负数?

C# code
 Int64 MaxSN = DateTime.Now.Year * (Int64)1000000000;
计算正确

C# code
 Int64 MaxSN = DateTime.Now.Year * 1000000000;
结果为什么为一个莫名其妙的负数?

[解决办法]
因为溢出了。
两个int计算DateTime.Now.Year * 1000000000得出来的是一个int32,之后才转化成int64,但是此时已经是负的了。
[解决办法]
Int64 MaxSN = (Int64)DateTime.Now.Year * 1000000000;

[解决办法]
探讨
Int64 MaxSN = (Int64)DateTime.Now.Year * 1000000000;

[解决办法]
Int64 MaxSN = (Int64)DateTime.Now.Year * 1000000000;
这种是强制类型转换DateTime.Now.Year 
Int64 MaxSN = DateTime.Now.Year * (Int64)1000000000;
这种是强制类型转换1000000000
类型不同,在内存那系统随便给了你个数 

[解决办法]
如果你的系统需要严格规避溢出的风险,请这么写:

C# code
checked{    try    {        Int64 MaxSN = DateTime.Now.Year * 1000000000;    }    catch (OverflowException ex)    {        // 如果溢出,会丢出一个OverflowException异常。    }} 

热点排行