首页 > 代码库 > 进制、类型转换、提升
进制、类型转换、提升
进制
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···>doublechar···>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.避免进行等量判断,即让浮点类型参与到布尔类型的表达式中
进制、类型转换、提升
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。