我想了解的是,如何在java内部实现扩展或缩小隐式转换。我知道它涉及到小提琴。
例如:
//implicit
int i =2400;
long a = (long)i;
//Explicit
float d = (float) 2.23423;
更新
我在看完这个问题后写了这篇文章 发布在这里Bitshifting to read/write data .Peter Lawrey给出了以下答案。
public long create(int one, int two){
return ((long) one << 32) | (two & 0xFFFFFFFFL);
}
为了重新进行相同的扩展转换,上面的扩展转换或多或少地发生在机器级别上,与彼得提到的熟悉的相同逻辑。
请告诉我你宝贵的意见。答案 0 :(得分:3)
Java使用CPU支持的IEEE 754标准机器代码指令。因此,Java没有使用某些功能实现此功能,您可以进一步细分。
从double转换为float。
对于浮点数加倍,除了扩展字段外,该过程类似。
然而,这一切都是在浮点处理器单元中完成的,Java并没有参与它的发生。
答案 1 :(得分:1)
查看this article关于缩小和扩大原始转换的信息。
答案 2 :(得分:-1)
double有64位,而float有32位。将double转换为float时,只需删除前32位。
副作用当你扩展你时只需添加0位来填充更大的类型,例如你在int的32位中添加32个零来构成一个长的。