gpt4 book ai didi

java - 将float和double转换为Java中的位和十六进制表示

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:33 30 4
gpt4 key购买 nike

如何获取 doublefloat 的单个位(或整个变量)?

例如如果我有 float a = 0.5;

我希望 String 等于:
“00111111000000000000000000000000”

或十六进制:
“F000000”

最佳答案

对于 Java,float 在 32 位上像 int,而 double 在 64 位上像 long。找到这些数字的二进制表示,您需要:

float a = 0.5f;
int bits = Float.floatToIntBits(a);
String.format("%32s", Integer.toBinaryString(bits)).replace(" ", "0");
String.format("%8s", Integer.toHexString(bits)).replace(" ", "0");

"00111111000000000000000000000000" bit representation (32 bits)
"3f000000" hexadecimal representation (32 bits)

double a = 0.5d;
long bits = Double.doubleToLongBits(a);
String.format("%64s", Long.toBinaryString(bits)).replace(" ", "0");
String.format("%16s", Long.toHexString(bits)).replace(" ", "0");

"0011111111100000000000000000000000000000000000000000000000000000" bit representation (64 bits)
"3fe0000000000000" hexadecimal representation (64 bits)

您可以通过执行反向操作来检查它是否有效:

int bits = Integer.parseInt("00111111000000000000000000000000", 2);
Float.intBitsToFloat(bits);

0.5 (float)

long bits = Long.parseLong("0011111111100000000000000000000000000000000000000000000000000000", 2);
Double.longBitsToDouble(bits);

0.5 (double)

对于十六进制表示,可以分别使用Integer.parseInt("...", 16);Long.parseLong("...", 16);

关于java - 将float和double转换为Java中的位和十六进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10643754/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com