为什么说Java的强转会精度损失?

为什么说Java的强转会精度损失?

强制类型转换规则: 容量大的转为容量小的数据类型,使用时加上强转符号,也就是高精度->低精度转换

例:

		byte b = (byte) 1000;
        System.out.println(b); // 为什么这里会造成精度溢出? 输出结果为:-24

我们知道在java种 ‘int’ 是 4 字节,每个字节占 8 bit,而**‘byte’**是 1 字节。
得出结论: int -> byte 32bit->8bit`

 		int a = 1000;  
 		// 十进制 1000 的二进制则是: 00000000 00000000 00000011 11101000
        // 所以 32bit 只取 8bit 得到 byte // 11101000
        // 11101000 在二进制中: 最高位为符号位 0表示正数 1表示负数
        // 在计算机中运算时 都是以补码进行运算
        // 11101000 -> 反码: 符号位不变其余位取反 10010111
        // 反码: 10010111  -> 补码:反码+1 10011000
        // 由于 10011000 符号位是1 所以是负数 最终结果为 -24
        byte b1 = (byte) a;
        System.out.println(b1); //-24
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值