2021-06-26,强制类型转换和精度损失

强制类型转换和精度损失

一,类型转换
byte short int long 为整数型数据类型。它们的所占空间大小从小到大排序为:(byte<short<int<long)。
int与long为较常用的整数型,拿int为例子,它的规范格式为:

int i =10;//10这个整数型字面值是int类型; i变量声明时也是int类型; int类型10赋值给i。

在Java中“整数型字面值”被默认当作int类型来处理。如果要用long类型来处理的话,需要在“整数型字面值”后面添加 “L”。
例:

long i=10L;//int类型赋值给long有类型转化,小容量→大容量 自动类型转换机制。

但如果存储的数据超过该类型存储容量的最大值,那么就会报错。如:

int i=2147483648;
/*Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The literal 2147483648 of type int is out of range (数值超过范围)*/
/*改正:*/
long z=2147483648L;

二,精度损失
例:

long x=100L;
 int y=x;//编译错误

大容量→小容量(×)大容量到小容量要强制类型转换,要有相应的转化符,加上强制类型转化符后可通过编译,但会有精度损失,建议不要使用。

三,强制类型转化原理
每个类型所占的字节不同,强制类型转化的原理是砍了前面的字节,比如转化前是:
00000000 01100100
转化后:
01100100
如果大容量想要转向小容量,那么需要添加所转类型的前缀。例如:

long k=2147483648L;
int e=(int)k;**//注意,有问题**

上述代码编译虽然通过了,但是精度损失,输出的值为负数,上述涉及到原码、补码、反码,计算机采用的是补码形式存储,于是将补码转化成源码。

再举个byte的例子:

byte b=50;/*因为在范围内,sun公司允许这样写。50为int类型变量字面值; byte为byte类型变量; 大int→小byte无法通过*/
byte b=(byte)50;//可通过但会有精度损失,(byte)强制类型转化符
byte b=128;//编译出错,超出范围。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值