short int转换?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了short int转换?相关的知识,希望对你有一定的参考价值。
short s1 = 5; //成立
short s2 = 5+1; //不成立
5+1为int,int转short,强制类型转换
第一行中short s1 = 5;中5应该也是int型(数值类型默认为int),为啥就能直接赋给s1
与清楚点,不说清楚就别发,水平菜的走远点
我自己这样解释
对于short s1 = 5;声明s1时在内存中开辟s1,然后把5直接放进去
而对于short s2 = 5+1;声明s2时也在内存开辟了一块区域,但5+1的计算是再另一块区域中进行的,因为 5和1都是int,所以最后5+1也为int,最后将这个值往s2里面放,s2为short,所以强制类型转换
这个在java语言规范里说得很清:
15.15.3 Unary Plus Operator +
The type of the operand expression of the unary + operator must be a type that is convertible (§5.1.8) to a primitive numeric type, or a compile-time error occurs. Unary numeric promotion (§) is performed on the operand. The type of the unary plus expression is the promoted type of the operand. The result of the unary plus expression is not a variable, but a value, even if the result of the operand expression is a variable.
At run time, the value of the unary plus expression is the promoted value of the operand.
大意是:+操作两边的操作数值将被提升,short被提升为int,结果不是变量而一个值,即使参与操作的数是变量。在运行时,这个+结果值将会是两个操作数的提升,这里结果是由short提升到int.
至于int不能显式赋值给short,因为有精度损失所以不能通过编译,这个你肯定很清楚了 参考技术A short s1 = 5你声明的是短整形,他当然是短整形了,单纯一个5放哪里他当然默认Int了 但是你声明short了,short s2 = 5+1;这个式子 右边不管5和1各自是short还是int 他们相加后自动类型一律转换为int,所以对于左边的short声明优先级比int低 所以就不合法了,这里低级到高级需要显示类型转换,但是每见你有显示转换,因此出错 参考技术B short 类型短整形,当然包含5
而5+1是一个运算语句,在默认的计算中5+1就是int 类型。
这就和,5+5.5 变为float是一个道理
这还不明白
"但5+1的计算是再另一块区域中进行的"错误
以上是关于short int转换?的主要内容,如果未能解决你的问题,请参考以下文章