Bar*_*ğlu 3 .net short .net-assembly
我创建了一个基本的控制台应用程序来进行这样的测试
short val = 32767;
val++;
Console.WriteLine(val);
Run Code Online (Sandbox Code Playgroud)
这给了我-32768作为预期结果
short val = 32767;
val = val +1;
Console.WriteLine(val);
Run Code Online (Sandbox Code Playgroud)
但这给了我这个错误
错误1**无法将类型'int'隐式转换为'short'.存在显式转换(您是否错过了演员?)
我很好奇是什么导致了这个?
提前致谢,
Ant*_*ram 12
操作的结果short + short定义为int.在第一种情况下,编译器正在继续(short)并对增量的结果应用强制转换,但它不在第二种情况下.
short myShort = 1;
int resultA = myShort + myShort; // addition returns an integer
short resultB = myShort++; // returns a short, why?
// resultB is essentially doing this
short resultB = (short)(myShort + 1);
Run Code Online (Sandbox Code Playgroud)
除了Joel在评论中提供的链接之外,您还可以参考C#4.0语言规范的 7.3.6.2节,其中列出了二进制数字促销的规则(包括表单的表达式a = b + c;)以及7.6.9.前缀和后缀运算符.