java的5条运算法则:
1.计算结果的数据类型,和最大类型一致
例如:
(1)3/2;
--运算结果是1,因为3和2都是int类型,结果1.5也是int类型,
不是double类型,这时就相当于取整,结果为1;
(2)3d/2;
--运算结果是1.5,其中3d的d指的是强转double类型,2是int类型,
由于double类型的字节比int大,而计算结果和最大类型一致,
故结果1.5是double类型;
2.byte,short,char比int的字节小,在运算的时候系统会自动转成int类型,并且返回int类型的结果
例如:
byte a=1;
a=a+1;//报错
--会报错,因为右边byte类型的a和1运算时,会被系统转成int类型,并返回int类型
在赋值给左边byte类型的a时,由于byte类型字节小,装不下int类型,故报错;
--修改方法:将a=a+1;改成a=(byte)(a+1);
其中(byte)将(a+1)的int类型结果强转成byte类型;
byte a=1;
a=(byte)(a+1);//正确
3.整数运算的溢出
例如:光速为300000km/s即是3亿m/s,计算1光年时,要注意溢出情况
System.out.println(300000000*60*60*24*365);//输出结果不正确
--因为int类型的取值范围是-2147483648~2147483647,简单记忆为-21亿~21亿,
因此3亿乘于60就已经超出int范围溢出,溢出的过程可以看做在-21亿~21亿不断循环,
故结果一定错误,拿错误的结果计算的结果也一定错误;
--修改方法:将300000000*60*60*24*365改成300000000L*60*60*24*365
其中L在第一位的意义是一开始就强转为long类型,可以满足之后的计算,
如果在最后加L不好的地 方是可能前面int运算时就溢出,使结果错误了,
再转成long类型还是错误;
4.浮点数运算的不精确
例如:
System.out.println(1-0.7);
//结果是0.30000000000000004
System.out.println(4.15*100);
//结果是415.00000000000006
5.浮点数运算的特殊值
例如:
System.out.println(1.0/0);//结果是Infinity
System.out.println(0.0/0.0);//结果是NaN
--其中Infinity是无穷大
--其中NaN是Not a Number,指不是数字,
NaN 用于处理计算中出现的错误情况,
比如 0.0 除以 0.0 或者求负数的平方根。