java - java 中的原始数据类型转换 - 内部逻辑

标签 java types casting bit-manipulation

伙计们,我想了解,加宽或缩小隐式转换是如何在 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/

相关文章:

PHP:将美元转换为美分

java - 基于屏幕大小自动调整UI,java swing中的UI

Java : If A extends B and B extends Object, 是多重继承

json - 如何在 Flutter 中转换 json 空数组?

c++ - 如何从类型(类)转换为标准 :string?

pointers - 类型将接口(interface)指针转换为接口(interface)指针

java - Webflux postgresql

java - 在终端中执行C程序和在Java中使用Runtime.getRuntime().exe()执行C程序有什么不同

c# - C# 中的菱形语法

java - 将 IA5String 转换为字符串