对整数进行转换非常简单,额外的位只是消失了。
但是,重要的是要了解在铸造浮点的情况下发生了什么?我试图阅读有关如何计算浮点数的信息,但我还没有找到一个能够很好地解释浮点数的信息。至少那是我的借口。我得到了基本的想法,虽然尾数的计算有点困难。
至少在Java 7之前,我知道浮点不能用于按位运算。这是有道理的,因为它们是如何在内部存储的。有关浮点运算或投射的重要信息吗?
所以,总结一下:
了解整数浮点的内部工作原理是否很重要?
将浮点数转换为整数的内部过程是什么?
答案 0 :(得分:1)
将浮点数转换为整数的内部过程是什么?
Java调用符合IEEE-754标准的机器代码指令。 Java没有什么可以做的。如果你想知道铸造是如何工作的,我建议你阅读标准。
基本上,尾数被指数移动并且应用了符号。即浮点数是符号* 2 ^指数*尾数,它所做的只是执行此计算和丢弃和小数部分。
答案 1 :(得分:0)
首先,您需要了解浮点数本质上是近似值。你可以输入1.23然后输出1.229998(或其他一些),因为1.23完全代表。无论你是否会进行任何演员表,你都需要理解这一点,以及它如何影响计算(尤其是比较)。
从强制转换的角度来看,将float
转换为double
会导致信息丢失,因为double
可以包含float
可以包含的每个值。但是从double
转换为float
会导致精度损失(对于非常大或小的数字,指数溢出/下溢),因为64位值中的信息比32中的更多。比特一,所以有些数据最终会“在场上”。
同样,从int
投射到double
不会导致信息丢失,因为double
可以包含int
可以包含的每个值,然后包含一些值。但是从int
转换为float
或从long
转换为double
或float
会导致精度损失(尽管永远不会有指数溢出/下溢)。
从float
或double
转换为int
或long
很容易导致上溢/下溢和重大数据丢失,如果float
或{ {1}}值具有大的正指数或任何负指数。当然,当你从浮点数转换为固定数时,数字的小数部分会被截断(基本上是“地板”操作)。