一、除法
1.整除:5/2=2
5/0(不可以,0不能做除数)
2.取余:5%2
3.结果得浮点数:5.0/2
二、数据类型之间转换
1.自动转换类型
例:(1)byte a=10;
short b=a;
或int b=a;(可以实现)
(2)byte a=10;
byte b=a+1;(不可以,默认存储形式都为int)
(3)byte a=10;
byte c=1;
byte b=a+c;(不可以,b默认为int数据类型,两个整数相加)
精度丢失:int转float,int转char
float存储需求是4字节(32位), 其中1位最高位是符号位,中间8位表示阶位,后32位表示值
double存储需求是8字节(64为),其中1位最高位是符号位,中间11位表示阶位,后52位表示值
2.浮点类型的精度丢失
①:产生精度丢失的原因
例:
public class SimpleTest {
public static void main(String[] args) {
System.out.println(1.2 - 1); } }
输出:
0.19999999999999996
这和我们预期的情况完全不符
我们来将10进制的0.2转化为2进制进行存储
算法是乘以2直到没有了小数为止
0.2 * 2 = 0.4 取整数部分 0
0.4 * 2 = 0.8 取整数部分 0
0.8 * 2 = 1.6 取整数部分 1
0.6 * 2 = 1.2 取整数部分 1
0.2 * 2 = 0.4 取整数部分 0
0.2的2进制从上到下可以表示为 00110011......
注意:上面的计算过程循环了,也就是说*2永远不可能消灭小数部分,这样算法将无限下去。很显然,小数的二进制表示有时是不可能精确的 。其实道理很简单,十进制系统中能不能准确表示出1/3呢?同样二进制系统也无法准确表示1/10。这也就解释了为什么浮点型减法出现了"减不尽"的精度丢失问题。
精度丢失就是我们的位数不够表示我们整个数值了
②:如何解决精度丢失
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal(Float.toString(1.2f));
BigDecimal b2 = new BigDecimal(Float.toString(1));
float s = b1.subtract(b2).floatValue();
System.out.println("s----" + s); }
3.强制类型转换
例:
int a=100587
byte b=(byte)a;输出造成精度丢失
三、关系运算符
四、逻辑运算符