日期:2014-05-16  浏览次数:20776 次

请问为什么short型变量直接相加也要使用“显式转换”呢?
请问为什么short型变量直接相加也要使用“显式转换”呢?
如下,对两个short型变量相加也会报错:
			short i=2,j=1;
i=i+j;

错误信息:
无法将类型“int”隐式转换为“short”。存在一个显式转换(是否缺少强制转换?) (CS0266) 


当然,如果这样增加“显式转换”代码是能编译的,但我想相当一部分人会觉得画蛇添足什么的了吧:
			short i=2,j=1;
i=(short)(i+j);


------解决方案--------------------
本帖最后由 bdmh 于 2014-02-21 15:02:14 编辑
不能将存储大小更大的非文本数值类型隐式转换为 short 类型
原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型。
http://msdn.microsoft.com/zh-cn/library/ybs77ex4.aspx
这里msdn有解释
------解决方案--------------------
有时候我也感觉c#里面的数据类型真的很操蛋
------解决方案--------------------
short和short做运算比较容易溢出,为了稳妥起见,C#把结果转换成int。
------解决方案--------------------
可能是出于考虑性能,编译器实际会将两个范围较小的short分别转换为int32,相加,所得结果自然是int型的,所以需要显式转换成short才行。
------解决方案--------------------


只能不懂帮顶
------解决方案--------------------
 + 操作最小的数值单位是 int,其实(在.net整个平台上)已经没有办法给两个short求和,只能做为int。

实际上你定义一个short,不但没有节省空间,而且也比使用int更慢。因为程序要能够执行,其第一条语句就是要把short变量赋值到堆栈上成为一个int,然后再把这个int数据取出来进行后边的计算。这不但没有节省空间,而且更慢。
------解决方案--------------------
 from MSDN:

"If you have 100% type safe managed code then you really can just copy it to the 64-bit platform and run it successfully under the 64-bit CLR."