短+短!=短? [复制]

Posted

技术标签:

【中文标题】短+短!=短? [复制]【英文标题】:short + short != short? [duplicate] 【发布时间】:2015-05-06 13:13:56 【问题描述】:

版本:Visual Studio Professional 2013 Update 4 构建参数:Prefer 32-bit 为真

我不明白以下 C# 代码中的错误:

short iCount = 20;
short iValue = iCount + (short)1;

向转换为 short 的 int 添加 short 会导致以下错误:

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

上面的错误,也出现在下面的例子中,在这里完全有效:

short iCount = 20;
short iValue = iCount + 1;

以下解决方法可消除错误:

short iCount = 20;
short iValue = (short)(iCount + 1);

所以“short + Int32 constant”形式的加法显然有效,结果是 Int32,需要将其强制转换为 short。

有没有解释为什么第一个代码示例失败或者这是一个编译器错误? (4次更新后我简直不敢相信)

【问题讨论】:

看看这个answer Related Related 也相关:***.com/questions/10065287/… 现代架构是为 32 位或 64 位算术构建的。 + 运算符将 16 位整数“提升”为 32 位,然后执行 32 位加法,得到 32 位结果,这更有效。尽管可能出乎意料,但这是设计使然,如 C# reference 中所述。 【参考方案1】:

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

【讨论】:

有趣!更完整的答案可以找到here

以上是关于短+短!=短? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

用 0 复制 char 数组中的短整数

在 JavaScript 中仅复制选定属性的最短方法是啥?

为啥我在 MVS 2010 的代码中出现绿色短划线和绿色框? [复制]

使用 jQuery 创建帖子表单并提交它的最短方法是啥? [复制]

GCM 会在短时间内发送复制主题消息,而 gcm 会延迟发送吗?

为啥短原语有赋值运算符(&=、+=)但没有非赋值运算符(&、+)? [复制]