s=s+32766//这一句发生错误,编译无法通过,因为32766一个int类型,当和一个short进行运算时,short会自动提升为int类型,然后再做运算,最后计算结果为int类型,然后赋值给s时,因为s是一个short类型的变量,不能把一个int类型的数据赋值给一类型为short的变量,所以没法通过编译器的检察.之所以不能把一个int类型的值赋给一个short类型的变量,是因为int占四个字节,也是就32个二进制位,而short只占两个字节,16个二进制位,它们所占的二进制位不相同,这种赋值就有可能产生值的错误.所以才不能赋值.就好比说你用一个能装一升水的容器,去装两升水,结果就不是两升水了.
s+=32766//为这种只有一次的运算,编译器不进行类型检察,然后就通过编译了,当在运行时,才确定这个值是否超出short范围,如果超出,则结果值错误.否则运行正常,上面的结果值最好能容得下,所以就正常了,如果你把s的值改为2试试,结果就为:-32768,看看结果,是一个负数,值已经发生错误了. |