两条短裤加在一起;t等于short
本文关键字:加在一起 等于 short 两条 | 更新日期: 2023-09-27 18:20:48
可能重复:
整数求和蓝色,短+=短问题
这种事正在发生,我感到很愚蠢,但我以前从未发生过这种事。我正在尝试做以下事情:
foreach (short a in answers)
{
if (a != myConstants.NOTCOMPLETE_SHORT)
{
result = result + a;
}
else
{
empty = true;
break;
}
}
答案是一系列的短句。intellisense告诉我result+a是一个int,我不能将它赋值给short。
我在这里一定遗漏了一些非常基本的东西,但不允许将两个空头添加在一起并分配给一个空头变量似乎很奇怪。
由于short
是16位整数,如果添加32,000
和32,000
(都是有效的short
s),则会得到不是有效short
的64,000
,因为Int16.MaxValue
是32767
。
因此,加法运算符必须返回一个32位的Int,以防止结果可能溢出。
更新:
为了好玩,我刚刚在PowerShell中尝试了这个:
PS C:'> ([System.Int32]::MaxValue + [System.Int32]::MaxValue).GetType().Name
Double
PS C:'> (10000000 + 10000000).GetType().Name
Int32
因此,如果需要,Int32
可以转换为Double
。
我要冒险说,在加法过程中,边界检查更昂贵,因此只有在可能出现溢出(如两个字节或两个短路)的情况下才应该这样做,尤其是当它们可能使用相同数量的内存时。我认为这就是语言的设计方式。
如果结果大于可能的最大短值,则算术运算可以换行(to-ve值)。由于short更有可能发生这种情况,而且int的范围更大,short+short是int。
正如其他答案中所指出的,两个short生成int是有充分理由的。加法赋值运算符+=重载返回一个short,因此您的代码将变为:
foreach (short a in answers)
{
if (a == myConstants.NOTCOMPLETE_SHORT)
{
empty = true;
break;
}
result += a;
}
重载operator+=
或更改代码以使:
short a = 6000;
short b = 6000;
result = (short) result + a //answer 12,000