日期:2014-05-17  浏览次数:20689 次

ushort越界问题,求教育
求教育:
C# code
ushort s1 = 65534;
 ushort s2 = 4;
 s1 = s1 + s2;
 s2 = s1 - s2;
 s1 = s1 - s2;

 
第一次,s1的值变为2;
  s2的值变为65534;
第二次,s1的值变为4;
也就是实现了交换,但是在第一次的时候,为什么没有越界报错,65538不是已经超出了ushort的上限吗,并且程序正确的实现了数据交换。



------解决方案--------------------
算数运算中是不会报移除错误的,溢出部分从新开始。
要显示的使用checked关键字检测移除。
C# code

checked
{
     ushort s1 = 65534;
     ushort s2 = 4;
     s1 = s1 + s2;
     s2 = s1 - s2;
     s1 = s1 - s2;
}