繁体   English   中英

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

[英]What is a the quickest way to bitwise convert two ints to a long in java?

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

但是,我的一些数据是长整数。 长整数是java中32位整数的两倍,64位。 如何获得长到两个整数,更重要的是,在阅读图像时又回到了很长时间? 由于Java没有无符号整数,因此整数或长整数的最高位是负符号位,即使位32(较低整数/像素)将是长整数中的普通位。

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

我需要做的是

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

无需使用Autoboxing( 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);

分裂

检索(上)位31-16

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

检索(下)位15-0

int lo = (int) val;

注意:

请注意以下两者之间的区别:

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

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

int u,v
long n = u;
if (v < 0) { ++n; }
n <<= 32;
n += v;

您需要使用相同的值创建两个新long,或者可以对整数进行类型转换。

int x = 0;
(long) int x = 2;

这声明了一个设置值为0的新整数,然后一旦变为long就将值更改为2。

简单的回应,但我希望它有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM