存在从 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
以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型。short z = x + y; // Error: no conversion from int to short 若要解决此问题,请使用强制转换:short z = ( short )(x + y); // OK: explicit conversion
整型提升:对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。
若他们中有一个double,则另一个转换为double
否则,若他们中有一个float,则另一个转换为float
否则,若他们中有一个long,则另一个转换为long
否则,两个操作数都转换为int。
可以理解为:他们的权限double > float > long > int > 其他一切类型
s += s;