C# 短+;短!=短?

C# 短+;短!=短?,c#,visual-studio-2013,short,C#,Visual Studio 2013,Short,版本:Visual Studio Professional 2013更新4 构建参数:首选32位为true 我不理解以下C代码中的错误: 将short添加到强制转换为short的int会导致以下错误: 无法将类型“int”隐式转换为“short”。存在显式转换(是否缺少强制转换?) 上述错误(在以下情况中也可以看到)在此处完全有效: short iCount = 20; short iValue = iCount + 1; 以下解决方法将删除该错误: short iCount = 20; sh

版本:Visual Studio Professional 2013更新4
构建参数:首选32位为true

我不理解以下C代码中的错误:

将short添加到强制转换为short的int会导致以下错误:

无法将类型“int”隐式转换为“short”。存在显式转换(是否缺少强制转换?)

上述错误(在以下情况中也可以看到)在此处完全有效:

short iCount = 20;
short iValue = iCount + 1;
以下解决方法将删除该错误:

short iCount = 20;
short iValue = (short)(iCount + 1);
所以“short+Int32常量”形式的加法显然有效,结果是Int32,需要转换为short


有没有解释为什么第一个代码示例失败,或者这是一个编译器错误?(经过4次更新后,我几乎无法相信这一点)

Int是定义了+运算符的最小有符号类型,因此尝试在短时间内使用+会导致这种错误。

看看这一点也有关系:现代体系结构是为32位或64位算术而构建的。对于
+
操作符来说,将16位int“升级”为32位,然后进行32位加法,结果为32位,这样更有效。虽然可能出乎意料,但它是经过设计的,如中所述。有趣!可以找到更完整的答案
short iCount = 20;
short iValue = (short)(iCount + 1);