伙计们,我想了解,加宽或缩小隐式转换是如何在 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);
}
重申一下,像上面这样的扩大转换或多或少地发生在机器级别,与彼得上面提到的类似逻辑相同。
请告诉我您的宝贵意见。
最佳答案
Java 使用 IEEE 754 CPU 支持的标准机器代码指令。因此,Java 不会使用您可以进一步分解的东西来实现此功能。
用于从 double 型到浮点型的转换。
- 标志被保留
- 指数会被截断,但是如果数字太大,它会变成无穷大,如果太小,它会变成零。
- 两种格式都有一个隐含的最高位,即 1,这一点没有改变。
- 保留尾数的前 23 位(可选对第 24 位进行舍入)
对于 float 到 double,过程类似,只是字段被扩展。
然而,这一切都是在浮点处理器单元中完成的,Java 不参与它的发生。
关于java - java 中的原始数据类型转换 - 内部逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5351916/