【问题标题】:two shorts added together don't equal a short? [duplicate]两条短裤加起来不等于一条短裤吗? [复制]
【发布时间】:2012-02-12 14:37:07
【问题描述】:

可能重复:
Integer summing blues, short += short problem

我觉得发生这种情况很愚蠢,但我以前从未发生过这种情况。我正在尝试执行以下操作:

foreach (short a in answers)
{
     if (a != myConstants.NOTCOMPLETE_SHORT)
     {
         result = result + a;
     }
     else
     {
         empty = true;
         break;
     }
}

answers 是一系列短裤。 intellisense 告诉我 result + a 是一个 int ,我不能将它分配给一个 short 。

我必须在这里遗漏一些非常基本的东西,但不允许将两条短裤加在一起并分配给一个短变量似乎很奇怪。

【问题讨论】:

标签: c#


【解决方案1】:

要么重载operator+=,要么更改代码:

short a = 6000;
short b = 6000;
result = (short) result + a //answer 12,000

【讨论】:

    【解决方案2】:

    正如在其他答案中已经指出的那样,两条短裤构成一个 int 是有充分理由的。加法赋值运算符 += 重载返回一个短的,因此您的代码将变为:

    foreach (short a in answers)
    {
        if (a == myConstants.NOTCOMPLETE_SHORT)
        {
             empty = true;
             break;
        }
        result += a;
    }
    

    【讨论】:

      【解决方案3】:

      由于 short 是一个 16 位整数,如果添加 32,00032,000(均有效的 shorts),您将得到 64,000,这不是有效的 short因为Int16.MaxValue32767

      因此,加法运算符必须返回一个 32 位的 Int 以防止结果可能溢出。

      更新:

      为了好玩,我只是在 PowerShell 中尝试了这个:

      PS C:\> ([System.Int32]::MaxValue + [System.Int32]::MaxValue).GetType().Name
      Double
      
      PS C:\> (10000000 + 10000000).GetType().Name
      Int32
      

      所以看起来像 Int32 可以在需要时转换为 Double

      我会说在加法过程中边界检查更昂贵,因此只有在可能发生溢出的情况下才应该这样做(比如两个字节或两个短裤) 特别是当他们可能使用相同数量的内存时。我认为这正是语言的设计方式。

      【讨论】:

      • 我也有同样的想法,但我可以将相同的逻辑应用于 int,如果我将两个 int 加在一起,值可能大于 int,所以我必须将它分配给 bigint。
      • 绝对认为是返回 int 的正确原因,因为加法可能* 导致需要超过 16 位的值......但是为什么 must* 适用于带短裤而不是 int 的加法?真的很好奇
      • 我也弄错了,Int16.MaxValue 实际上是 32767 :)
      • @peroija - 在我的测试中,Int32 似乎可以转换为 Double
      【解决方案4】:

      如果结果大于最大可能的短值,则算术可以环绕(到 -ve 值)。由于short 更可能发生这种情况,并且由于 int 具有更大的范围,因此 short + short 是一个 int。

      【讨论】:

        猜你喜欢
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        • 2012-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多