[英]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的方法也会丢弃高位,这些方法将包含或可能包含按位(二进制)信息!
我需要做的是
无需使用Autoboxing( Long
, Integer
等)。 基元工作得很好。 以下是您在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.