short s = 0;
s = s + s;第二句会提示让强制转换成short,不明白啊,两个short相加难道加出来不是short么?

解决方案 »

  1.   

    存在从 short 到 int、long、float、double 或 decimal 的预定义隐式转换。不能将存储大小更大的非文本数值类型隐式转换为 short(有关整型的存储大小的信息,请参见 整型表(C# 参考))。例如,请看以下两个 short 变量 x 和 y:short x = 5, y = 12;
     以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型。short z = x + y; // Error: no conversion from int to short 若要解决此问题,请使用强制转换:short z = ( short )(x + y); // OK: explicit conversion 
      

  2.   

    进行算术运算(加、减、乘、除、取余以及符号运算)时,不同类型数招必须转换成同 一类型的数据才能运算,算术转换原则为:
     
       整型提升:对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。
      

  3.   

    是先把short转换成int再加的,结果是int类型!
      

  4.   

    在short做运算时,会先转换成int类型。所以要强制类型转换。
      

  5.   

    在对2个操作数进行2原操作前,需要先把他们转化成相同的类型:
    若他们中有一个double,则另一个转换为double
    否则,若他们中有一个float,则另一个转换为float
    否则,若他们中有一个long,则另一个转换为long
    否则,两个操作数都转换为int。
    可以理解为:他们的权限double > float > long > int > 其他一切类型
      

  6.   

    右边会成为int类型,要想不强制转换
    s += s;