java得类型转换和运算符
java得类型转换和运算符
一、类型转换
1. 自动类型转换(隐式类型转换)
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为 同一类型,然后进行运算。
转换从低级到高级。
1-1自动转换有以下规律:
小的类型自动转化为大的类型
整数类型可以自动转化为浮点类型,可能会产生舍入误差
字符可以自动提升为整数
1-2:long--------àfloat:这个过程会可能产生精度丢失。
1-3:隐式类型会自动转换
1-4、Float和Double提供了快速的运算,然而问题在于转换为二进制的时 候,有些数字不能完全转换,只能无限接近于原本的值
1-5、整形属于准确度,它是100%的准确某个值;Float和Double是精确数,精确到某一位数,它只是无限接近于真实值,不一定等于真实值
1-6、字符可以自动提升整形,但是最主要的还是自动提升int,因为java的字符本质存储0-65535,它是在整形里面得数,本质是可以提到整形计算
2、强制类型转换
2-1、格式: (type)value type是要强制类型转换后的数据类型
注意:强制类型转换可能导致溢出或损失精度
在把容量大的类型转换为容量小的类型时必须使用强制类型转换
浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
2-2溢出
例如 byte d =(byte)128
我们给的180的值已经超出byte的范围,它在在计算机中用的是
补码:00000000 00000000 00000000 10000000 128,
人读的是原码:00000000 00000000 00000000 10000000 128,
反码:00000000 00000000 00000000 10000000 128
反码和补码都等于本身,就等于原码,所以它们都是一样的值。
如果强制转换就会把前面的三段删除,就会出现:这样的
补码:10000000
补码-1变成反码就会是:11111111 ,它就会无限的向前进一位,
如果反码转换原码:10000000,符号位保持不变,其余位取反;负数的补码是在其反码的基础上+1
正数的反码,补码是其本身,
溢出它本身就是一个循环,在java中是最大值就会变成最小的值 ,是最小的值就会变成最大值。溢出就是类型内存的问题,
2-3损失精度
如果是最后的结果是:9.223375245865E18
那么我们就是精度丢失,这个是科学技术法,它会进行省略,如果进行无数次运行,那么精度丢失会越来越大,这些误差是可以累积在一起的,每个类型都会有尾数位,如果超过这些尾数位,就会产生精度丢失
- 运算符
Java运算符分成以下几组:
1. 算术运算符
2. 关系运算符
3. 逻辑运算符、
4. 赋值运算符
2-1算术运算符
注意:自增(自减)在前面和在后面的区别:
++y(y):先将 y 的值自增(自减)1,然后再在当前表达式中使用 y 的值。 y++(y):先在当前表达式中使用 y 的值,然后再将 y 的值自增(自减)1。
注意:
1、整数/整数=整数,是截断取整,而不是四舍五入取整
2、整数不能除0,
3、当除数或者被除数中有一个为浮点型的,那么结果就是自然除法的结果,
4、如果此时除数为0或者0.0,那么结果为正无穷或者负无穷
5、0.0除0.0结果为NaN 非数/
6、% 取余
7、两个整数时 第二个数不能是0
8、一个或者2个为浮点数,第二个数为0或者0.0时,结果为NaN,
9、第一个数为0或0.0时,结果为0.0
10、++ 自加、-- 自减 ;单目运算符
2-2关系运算符
equals 用于判断引用类型的值
==在判断在基本数据类型,比较得是值。但是在比较引用类型时候,比较的是两个变量的内存指向的地址是否一样,如果是那么相等,如果不是就是不等
2-3逻辑运算符
2-4赋值运算符