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

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

2012-03-21 
short s1 1 s1 s1 + 1与short s1 1 s1 + 1区别是什么这是一道经典的.net面试题,第一句short s1

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.html
前几天有人发过了 还是贴下吧 懒的写了

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

热点排行