为什么从Int16变量Int32中减去Int16参数的结果?

Jad*_*ias 10 .net c# variables

可能重复:
byte + byte = int ...为什么?

我有这样的方法:

 void Method(short parameter)
 {
     short localVariable = 0;
     var result = localVariable - parameter;
 }
Run Code Online (Sandbox Code Playgroud)

为什么结果Int32而不是Int16

Hen*_*man 11

它不仅仅是减法,只是没有短(或字节/字节)算术.

short a = 2, b = 3;
short c = a + b;
Run Code Online (Sandbox Code Playgroud)

会给出错误,它不能将int(a + b)转换为short(c).

几乎从不使用短片的另一个原因.

附加:在任何计算中,short和sbyte将始终"扩展"为int,ushort和byte to uint.这种行为可以追溯到K&R C(并且可能比这还要老).

(旧的)原因是,处理char时,afaik,效率和溢出问题.最后一个原因不再适用于C#,其中char是16位且不能隐式转换为int.但非常幸运的是,C#数字表达式在很大程度上与C和C++保持兼容.


Ken*_* K. 7

默认情况下,所有具有小于Int32的整数的操作都会扩展为32位.结果是Int32的原因只是在计算之后保持原样.如果检查MSIL算术操作码,则它们使用的唯一整数数字类型是Int32和Int64.这是"按设计".

如果您希望以Int16格式返回结果,那么如果您在代码中执行强制转换,或者编译器(hypotetically)在"引擎盖下"发出转换则无关紧要.

此外,上述示例可以通过演员轻松解决

short a = 2, b = 3;

short c = (short) (a + b);
Run Code Online (Sandbox Code Playgroud)

这两个数字将扩展为32位,被减去,然后被截断回16位,这就是MS的预期.

使用短(或字节)的优点主要是存储大量数据(图形数据,流媒体等)的情况

PS哦,文章对于发音以辅音开头的单词是"a",对于发音形式以元音开头的单词是"an".一个数字,AN int.;)

  • +1很好的答案.(并且对于你对无限期文章的回答应该得到奖励.;-)) (3认同)