首页 > 代码库 > 进制、类型转换、提升

进制、类型转换、提升

进制

java支持四种进制表示
进制 示例 前缀 备注
十进制 int x = 10;    
二进制 int x = 0b10; 0b或0B 计算机储存
八进制 int x = 010; 0 兼容以前程序
十六进制 int x = 0xceaf 0x或0X 0~9,a~f
细节:
  • 一个十六进制位可以表示四个二进制位
  • 当数值位数较多时,可以使用下划线对数字进行隔开,例:1_230_456
 
字面常量
  • 整数:字面常量为int型,如果要表示long类型的字面常量,使用L或l做后缀,建议使用L,因为字母l与数字1相似,易造成混淆
  • 小数:字面常量为double型,如果要表示float类型的字面常量,使用f或F作为后缀
                   double类型的后缀为d或D,可以省略
 
浮点类型科学计数法表达
   例:
  • 1.2*106   即1.2e6或1.2E6,仅支持浮点类型,e(E)表示以10为底
  • 1.2*26     即1.2p6或1.2P6,仅支持16进制,p(P)表示以2为底
 
数据类型的转换(Convert)
  • boolean布尔型只能与本类型进行运算,不能与其他其中基本数据类型转换
  • 分类:
1、自动转换,安全,目标类型取值范围大于源类型,即能容纳源类型所有值
 
2、强制转换,目标类型取值集合并未能完全容纳元类型,因此易产生数据丢失,只有通过强制转换运算符通过编译器
 
  • 基本数据类型取值范围(小~大)
byte···>short···>int···>long···>float···>double
              char···>int···>long···>float···>double
 
两种转换的判断
   1、当目标类型比源数据类型更高时,即低数据类型转换为高数据类型,为自动转换,可以自动完成,无需额外操作
   2、当目标类型不比源数据类型更高时,该转换为强制转换,目标类型=(目标类型)源类型
   说明:char与short,以及char与byte之间,并没有类型的高低之分,无论如何转换,都要强制转换,使用类型转换运算符
 
  •    强制转换的数据丢失
当高类型储存的数据在低类型的取值范围内时,并不会产生数据丢失,反之,则否
细节:
  • 数据类型的高低之分在一定程度上与该类型所占字节多少有关【long(8字节)与float(4字节)比较时例外】,字节越多,有更多的位来储存数据
  • 当高类型数据转换为低类型数据时,由于低类型数据所占位数较少,因此高类型数据中的高位数据无空间储存,造成数据丢失
 
 
数据类型提升
 
  • 基础概念
x + y * z        ···>  表达式
x ,y,z       ···>  操作数
+,*              ···>  运算符
 
  • 提升原则 /表达式结果
1、byte,short,char会提升为int型
2、表达式结果的类型与参与运算的操作数的最高类型一致
原则说明:
两项原则同时成立,密不可分
类型提升是基于运算的,如果没有参与运算(即无运算符),该数据类型就不会得到提升
表达式结果类型最低为int,最高为double
示例:
byte b = 1;
byte b2 = 20;
b2=b;   //此时无运算符,数据无提升
b2=-b;  //此时参与运算,b为变量,非常量,且-b即为b取反,相当于b*(-1),此时-b已提升为int型,需强制转换,因此:b2 = (byte)-b
 
运算
  • 整数类型
byte,short,int,long
在java当中,根据表达式结果类型的原则可知,整数的除法运算,其结果还是整数,当无法整除时,取值原则为“向零取整”,与四舍五入无关
 
  • 字符类型
char(无符号类型,使用‘ ‘作为界定)
java采用的是unicode字符集,当类型为char的字符参与运算时,字符会以unicode字符集中对应编码的码值参与运算
示例:
char c = ‘a‘;
System.out.println(c + 1);
此时输出值为  98,因为a在unicode字符集的码值为97(字母大小写相差32,即A码值:65,a码值:97)
 
  • 浮点类型
float,double
虽然float占4字节,较long的8字节更节省空间,且float类型的有效范围更大,但浮点类型储存的是近似值,并不精确
 
float类型能精确储存的只有2n的类型
 
1.避免数量级相差较大的浮点类型的计算,考虑到浮点类型的最小间隙值,相差较大的数量级运算可能无法跨越最小间隙值
2.避免进行等量判断,即让浮点类型参与到布尔类型的表达式中
 

进制、类型转换、提升