您的位置:首页 > 编程语言 > Java开发

core java 学习笔记(2)

2008-06-11 18:53 369 查看
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位最后得到的结果是相同的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: