gpt4 book ai didi

java - 回复 : Convert Double to byte[] array

转载 作者:行者123 更新时间:2023-11-30 04:08:36 24 4
gpt4 key购买 nike


引用( Double to byte[] )它包含了我需要的问题和解决方案。

private byte[] convert(Double d) {
byte[] output = new byte[8];
Long lng = Double.doubleToLongBits(d);
for (int i = 0; i < 8; i++) {
output[i] = (byte)((lng >> ((7 - i) * 8)) & 0xff);
}
return output;
}

但我不知道它是如何/为什么工作的,我知道循环正在将组成 Double 的 8 个字节中的每一个分配给数组。但我不明白字节是如何构造的。有人可以向我解释一下下面的表达式吗?

 ((lng >> ((7 - i) * 8)) & 0xff);

为什么是 Double.doubleToLongBits(d);参与其中?

最佳答案

让我们分解一下这个表达式:

((lng >> ((7 - i) * 8)) & 0xff);

一步一步来。 ((7 - i) * 8) 应该是显而易见的。 >> 是二进制右移运算符。它将其左操作数旋转右操作数从左侧填充 MSB 的位数。因此,lng 在每次迭代中都会旋转 (7-i) 字节数。

& 是按位 AND 运算符,这意味着如果两个操作数的相同位位置上都有 1,则得到 1,否则得到 0。因此,基本上与 进行 AND 运算0xff 基本上为我们提供了旋转后的 lng 的最后一个字节。

将它们放在一起,您可以从每次迭代中的最高有效字节开始获取 lng 的每个字节。

要回答问题的第二部分,请尝试直接旋转 double 值的位(您将得到一个严重的错误)。在Java中,double和long使用相同的字节数(8),因此如果要执行按位运算,必须先将double值转换为long。

关于java - 回复 : Convert Double to byte[] array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20176528/

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