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

byte/char/short在运算过程中遇到的问题
各位高手请帮着分析一下为什么 short s=1; s=s+1; 在编译是会有问题提示说不可以将int类型转换成short类型。但是short s=1; s+=1;就没有上述的问题呢?难道s+=1 跟s=s+1;不等价吗?
------解决方案--------------------
s+=1;  和 s=s+1;
并不等价
s+1这个表达式返回的是一个整形数字
------解决方案--------------------
这里涉及到向上和向下兼容的问题,如,一个整型和一个浮点型运算,结果会是一个浮点型,一个浮点和一个双精度运算,结果是双精度,程序总能向大的类型去容纳小的类型(我这里用大和小来表示不太符合,明白我说的是啥就好).s+=1;s++等运算符是自身相加,类型不变,而s=s+1;其实是分两步的,第一步先算s+1;这里1是整型,向大兼容,得出结果是整型,然后再把这个整型赋值给s,这当然是不行的,所以必须得转换.但是反过来,如果s是浮点型的话,会怎样呢,是的,不需要强转,因为向大兼容.