浮点与整数之间的强制型别转换

浮点与整数之间的强制型别转换

问题描述:

我将浮点类型数据强制转换成整数类型时发现,不管浮点数类型数据多大,转换后的整数值都会呈现2147483647(2^31 -1)。但假如使用整数之间的转换,超过最大值后产生溢位,可以正常显示负数


我在想这是否跟浮点转整数会产生经度丢失有关

相关截图:

https://img1.sycdn.imooc.com//climg/619858b60907ffa107601047.jpg

相关代码:

float f1 = 999999999999f;
float f2 = 99999999999f;

int a = (int)f1;
short s = (short)f1;
System.out.println("int a = "+a);
System.out.println("short s = "+s);


a = (int)f2;
s = (short)f2;
System.out.println("int a = "+a);
System.out.println("short s = "+s);


a = (int)2147483648F;
s = (short)2147483648F;
System.out.println("int a = "+a);
System.out.println("short s = "+s);


a = (int)99999999999l;
s = (short)99999999999l;
System.out.println("int a = "+a);
System.out.println("short s = "+s);

尝试过的解决方式:

我新增加了short类型与浮点类型之间的强制转换,但结果不如int类型一般卡在最大值,而是直接进位变成-1(1111 1111 1111 1111)

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小明 2021-11-20 11:07:55

同学您好,

int类型最大值2147483647(2^31 -1),所以转换后不管数据有多大都会呈现出该数值,浮点型数值转换为整数类型,是一种强制转换类型,会造成精度的丢失。这也是java中的规定。

https://img1.sycdn.imooc.com//climg/6198668709cde4e209770526.jpg

祝同学学习愉快~

  • 提问者 Zach_Lin #1

    请问一下,在我的代码中,如果转换后若超出范围会呈现最大值,那么float类型(999999999999f)强制转换成short不应该是32,767吗?为什么结果是-1(1111 1111 1111 1111)呢


    现在的想法是
    2021-11-20 11:58:24
  • 好帮手慕小明 回复 提问者 Zach_Lin #2

    同学您好,

    当一个数据的溢出时,它会达到反向的最大值,所以就会出现这样的结果

    同学在现阶段只需要掌握类型之间的转换即可,无需深究

    如果同学感兴趣的话可以了解一下计算机的组成原理

    祝同学学习愉快~

    2021-11-20 16:39:19
  • 提问者 Zach_Lin 回复 好帮手慕小明 #3

    谢谢回答,计组原理我知道,只是好奇为什么同样产生溢位,int类型是最大值2147483647,short类型是-1


    案理来说都要是比特位全1,经过补数转换后都要是-1

    现在的想法是
    2021-11-20 17:17:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师