当前位置: 代码迷 >> ASP.NET >> short s1 = 1; s1 = s1 + 1;与short s1 = 1; s1 += 1;区别是什么,该如何解决
  详细解决方案

short s1 = 1; s1 = s1 + 1;与short s1 = 1; s1 += 1;区别是什么,该如何解决

热度:8110   发布时间:2013-02-25 00:00:00.0
short s1 = 1; s1 = s1 + 1;与short s1 = 1; s1 += 1;区别是什么
这是一道经典的.net面试题,第一句short s1 = 1; s1 = s1 + 1;是错的,第二句short s1 = 1; s1 += 1;是正确的,我想知道这个是为什么?

------解决方案--------------------------------------------------------
s1 = s1 + 1;
先自动将s1转化为范围较大的int型,然后和1相加,得到一个int型,再赋给short型变量,范围大的赋给范围小的,编译器不允许这么做。所以报错。

s1+=1能运行,估计对+=这种情况,自动将1转化为+=左边的变量类型,所以short=short+(short)1,能通过编译。不过这仅是个人推测而已。
------解决方案--------------------------------------------------------
http://topic.csdn.net/u/20120123/22/1b7e6f60-44c4-400e-a1f8-99ca648dfffd
前几天有人发过了 还是贴下吧 懒的写了

1. short s1=1;s1=s1+1;为什么是错的

在进行算法运算的时候,内部CLR的虚拟机只能进行最低32位的运算 也就是int
所以不管你是short+short 还是byte+short 最终都会被提升扩展成Int32 也就是int
也就是说s1+1最后是int型 但左边是s1是short型 很明显一桶水倒到一杯水里会造成数据丢失 所以是错的
你必须要显示转换才可以
C# code
s1 = (short)(s1 = 1);
  相关解决方案