gpt4 book ai didi

java - 在 Java 中将两个 int 按位转换为 long 的最快方法是什么?

转载 作者:行者123 更新时间:2023-11-29 05:29:35 24 4
gpt4 key购买 nike

我一直使用图像来存储数据,因为通过 Paint.net 编辑二进制数据比大多数十六进制编辑器要友好得多。

但是,我的一些数据是长整数。长整数的大小是 Java 中 64 位 32 位整数的两倍。如何在读取图像时将 long 转换为两个整数,更重要的是,如何将 long 转换为 long?由于 Java 没有无符号整数,整数或长整数的最高位是负号位,即使第 32 位(较低的整数/像素)将是长整数中的普通位。

大多数将 long 转换为 int 的方法也会丢弃高位,这将或可能包含按位(二进制)信息!

我需要做的是

  1. 将一个 long 转换为两个忠实包含其位数据的整数
  2. 将两个整数转换回忠实包含其位数据的 long。

最佳答案

无需使用自动装箱(LongInteger 等)。基元工作得很好。以下是您可以使用 Java 编程语言做的最好的事情。

加入

将两个int组合成一个long

int lo; // Integer to fill lower bits
int hi; // Integer to fill upper bits
long val = (((long) hi) << 32) | (lo & 0xffffffffL);

split

检索(高)位 31-16

int hi = (int) (val >> 32);

检索(低)位 15-0

int lo = (int) val;

备注:

注意以下之间的区别:

  • n >> 32 (符号扩展右移)
  • n >>> 32 (零填充右移)

由于 Java 仅使用有符号位,因此引入了 >>> 运算符来处理整数,就好像它们是“无符号”

关于java - 在 Java 中将两个 int 按位转换为 long 的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591637/

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