第一个程序:
public class MFirProg{
public static void main(String[] args){
byte num1=1;
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
}
}
第二个程序:
public class MFirProg{
public static void main(String[] args){
byte num1=1;
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
}
}
第一个程序编译的时候提示出错:num1=num1*2 可能损失精度但第二个程序就可以编译运行
num1=num1*2和num1*=2不是等价的吗?谁能解答一下啊?谢谢阿
public class MFirProg{
public static void main(String[] args){
byte num1=1;
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
num1=num1*2;
System.out.println("Num="+num1);
}
}
第二个程序:
public class MFirProg{
public static void main(String[] args){
byte num1=1;
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
num1*=2;
System.out.println("Num="+num1);
}
}
第一个程序编译的时候提示出错:num1=num1*2 可能损失精度但第二个程序就可以编译运行
num1=num1*2和num1*=2不是等价的吗?谁能解答一下啊?谢谢阿
num1=num1*2;
在运算的时候结果是int型的,而你的num1是byte所以会出现第一个程序编译的时候提示出错:num1=num1*2 可能损失精度
应该这样写 num1=(byte)(num1*2);
第二个程序就可以编译运行
是系统在运行的时候帮你转换了!
2就是寄存器右移1位,但是*2呢,那就是首先要开辟一个空间给一个变量,然后做右移操作,再付给原来的变量。
因为是byte,所以*2时就说是损失了精度,如果把num1改成float或者int型,就没有问题了。两者都可以了。