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类型的计算可能会存在误差,如下:
为什么会出现是上面的这种情况呢?主要是因为浮点数在计算机中是以二进制表示的,而在二进制中是无法去精确计算十进制小数的。如果想精确计算,可使用BigDecimal类。如下:
1.2 strictfp 为了得到较为理想的结果,可以使用strictfp关键字,用法如下:
加入strictfp关键字后可以产生较为理想的结果,注意,只是理想结果,而不是结确结果。对大多数的程序设计人员来说,浮点溢出不是什么大问题,可忽略此问题。
1.3 运算符
逻辑运算符:&&(逻辑与),||(逻辑或)
位运算符:&(与),|(或),^(异或),~(非)
移位运算符:>>(右移),<<(左移),>>>(无符号右移)
注意:不存在无称号左移,只能对整型数据进行移位操作
对移位运算符右侧的参数要进行模32的运算,左侧的参数是long要进行模64的运算,如下:
可以看出,将long类型右移3位与右移67位最后得到的结果是相同的。
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位最后得到的结果是相同的。
相关文章推荐
- Core Java 8 学习笔记(二)Java的基本数据类型
- static修饰符- Core Java 学习笔记
- core java学习笔记(1)
- core java学习笔记(3)
- [core java学习笔记][第十章部署应用程序]
- Java for Web学习笔记(二八):JSTL(4)Core Tag(下)
- java反射学习笔记-core java
- [core java学习笔记][第四章对象与类]
- [core java学习笔记][第十章部署应用程序]
- 我的二十一天CoreJava 学习笔记
- Java Core II 学习笔记
- Core Java学习笔记摘录系列--第3章 Java的基本程序设计结构
- java 学习笔记(core java)部分
- CoreJava学习笔记深入浅出个人心得———Day1
- Core java学习笔记(二)
- 学习笔记 ---- Core Java: 十一章异常、日志、断言和调试
- [core java学习笔记][第四章对象与类]
- [core java学习笔记][第十一章异常断言日志调试]
- 我的二十一天CoreJava 学习笔记
- Core Java 学习笔记——2.基本数据类型&类型转换