日期:2014-05-20  浏览次数:20822 次

a=a+1;的简单问题!
问题:

//////////////
short a=1;
a=a+1;

这个不可以编译通过很好理解,1是int型,a+1的运算结果是int型,不可以强制转换成short型。
///////////////


再看:
///////////////////
short a=1;
a+=1;
这个可以编译通过,为什么?到底a+=1是怎么进行运算的?

/////////////////////
在群里一个刚学C#的人问的,我解决不了。。。5555555555.....

------解决方案--------------------
很简单...+=中的+是根据左操作数类型推断结果类型的,它会自动将默认的int型1转换为short型1...

short a=1;
a+=32767;//编译可以通过...

short a=1;
a+=32768;//编译就不能通过了,而且你注意看错误信息,常量值“327678”无法转换为“short”...

你可以看一下IL代码...

short a=1;
a=(short)(a+1);



short a=1;
a+=1;

是完全一样的...也就是说+=会自动转换类型,但是这种转换只能是可以隐式转换的类型...