core java 第三章-----java基本程序结构设计
1.1 java规定了八种基本数据类型,byte,short,int ,long,float,double,char,boolean,其中long类型以L作后缀,float类型以F作后缀,若不添加F作为后缀,则默认为double类型。对double类型的计算可能会存在误差,如下:
import java.math.BigDecimal;
class TestDemo2
{
public static void main(String[] args)
{
double i=1.2;
double j=1.1;
System.out.println(i+j);
System.out.println(i-j); //存在误差
System.out.println(i*j);
System.out.println(i/j); //存在误差
}
}---------- java解释器 ----------
2.3
0.09999999999999987
1.32
1.0909090909090908
输出完毕 (耗时 0 秒)
为什么会出现是上面的这种情况呢?主要是因为浮点数在计算机中是以二进制表示的,而在二进制中是无法去精确计算十进制小数的。如果想精确计算,可使用BigDecimal类。如下:
import java.math.BigDecimal;
class TestDemo4
{
public static void main(String[] args)
{
double i=1.2;
double j=1.1;
BigDecimal bd1=BigDecimal.valueOf(i);
BigDecimal bd2=BigDecimal.valueOf(j);
BigDecimal bd3=new BigDecimal(0.0);
bd3=bd1.add(bd2); //加
System.out.println(bd3);
bd3=bd1.subtract(bd2); //减
System.out.println(bd3);
bd3=bd1.multiply(bd2); //乘
System.out.println(bd3);
bd3=bd1.divide(bd2,5,BigDecimal.ROUND_HALF_DOWN ); //除,除不尽是调用此方法,否则抛出异常
System.out.println(bd3);
}
}
---------- java解释器 ----------
2.3
0.1
1.32
1.09091
输出完毕 (耗时 0 秒)
1.2 strictfp 为了得到较为理想的结果,可以使用strictfp关键字,用法如下:
import java.math.BigDecimal;
class TestDemo2
{
public static strictfp void main(String[] args)
{
double i=1.2;
double j=1.1;
System.out.println(i+j);
System.out.println(i-j); //存在误差
System.out.println(i*j);
System.out.println(i/j); //存在误差
}
}
加入strictfp关键字后可以产生较为理想的结果,注意,只是理想结果,而不是结确结果。对大多数的程序设计人员来说,浮点溢出不是什么大问题,可忽略此问题。
1.3 运算符
逻辑运算符:&&(逻辑与),||(逻辑或)
位运算符:&(与),|(或),^(异或),~(非)
移位运算符:>>(右移),<<(左移),>>>(无符号右移)
注意:不存在无称号左移,只能对整型数据进行移位操作
对移位运算符右侧的参数要进行模32的运算,左侧的参数是long要进行模64的运算,如下:
class TestDemo3
{
public static void main(String[] args)
{
int m=2;
System.out.println(m>>3);//取模32
byte n=10;
System.out.println(n<<32); //取模32
long l=110L;
System.out.println(l<<64);//取模64
System.out.println(l<<3);
System.out.println(l<<67);
double d=1.234;
//System.out.println(d<<64); 只能对整型进行移位操作
}
}
---------- java解释器 ----------
0
10
110
880
880
输出完毕 (耗时 0 秒)
可以看出,将long类型右移3位与右移67位最后得到的结果是相同的。