嗨,我是新来的,这是我的第一个问题: 我有一个简单的aritmetic运算符代码。 但它不会起作用:
int a = 10;
short premennaTypuShort = (short)a; /*retyped variable a into short type and entered into new variable*/
premennaTypuShort = premennaTypuShort - 7;
/*now i am trying to decrease the number but eclipse wrote that cannot convert from int to short.*/
我正在尝试减少指定为short的数字但是eclipse写道无法从int转换为short。我不承认为什么。 那么问题出在哪里?我该如何修复此错误?
答案 0 :(得分:3)
java是32位。这意味着无论何时执行任何算术运算,它都将返回32位值。所以,你必须再次将其缩短,如下:
int a = 10;
short premennaTypuShort = (short)a;
premennaTypuShort =(short)(premennaTypuShort - 7);
答案 1 :(得分:2)
问题在于,为了计算premennaTypuShort - 7
,首先需要将premennaTypuShort
转换为int
,因此计算结果为int
。< / p>
这反过来意味着您正在尝试将int
分配回short
变量,这需要您做出明确的向下转发。
答案 2 :(得分:2)
当您使用byte
,short
或char
执行涉及ints
的算术运算时,会自动升级到{int
1}}原始类型。
在此,您尝试将int
分配回short
。
解决方案将是赋值运算符-=
,这将避免转换为int
int a = 10;
short premennaTypuShort = (short)a;
premennaTypuShort-=7;
System.out.println(premennaTypuShort); // 3
赋值算子也有不好的一面。请查看以下代码。
short s = Short.MAX_VALUE;
s+=1;
System.out.println(s); // -32768
通过将1
添加到Short.MAX_VALUE(32767
),您可以获得短缺并获得意外结果。
答案 3 :(得分:1)
加法运算符(+和 - )是“数值整数运算符”。并且数值整数运算符总是生成int或long类型的值。
因为,除了具有至少1个long类型的操作数的移位运算符之外的任何整数运算符都是使用64位精度执行的,结果将是long类型。
否则,操作使用32位精度执行,结果将为int类型。
这就是为什么表达式premennaTypuShort – 7
生成int
类型的结果并将int
值存储到short
,您需要专门将其转换为short
像跟随,这被称为缩小。
premennaTypuShort = (short)(premennaTypuShort - 7)