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;}