java 把64位long,转成2个32位的Int,再回转成long
时间: 2023-11-09 07:07:42 浏览: 193
Java中将64位的long类型拆分成两个32位的int类型可以使用位运算和类型转换来实现,具体实现如下:
将64位long类型拆分成两个32位int类型:
```
long x = 1234567890123456789L;
int high = (int)(x >> 32);
int low = (int)x;
```
将两个32位int类型合并成一个64位long类型:
```
long x = ((long)high << 32) | (low & 0xFFFFFFFFL);
```
在将两个32位int类型合并成一个64位long类型时,需要将高32位左移32位,并使用按位或运算将低32位与高32位合并起来。注意,低32位需要转换成long类型,以避免在按位或运算时发生数据溢出。
需要注意的是,如果原始的long类型数值为负数,则在将其拆分成两个int类型时,需要使用无符号右移运算符" >>>",以保持其符号位不变。例如:
```
long x = -1234567890123456789L;
int high = (int)(x >>> 32);
int low = (int)x;
```
同样,在将两个int类型合并成一个long类型时,需要将高32位转换成long类型并使用无符号左移运算符"<<",以保持其符号位不变。
相关问题
java int 字节 64位_Java 位运算 64位long数据 转成2个 32位 int数据 及 回加成原数据...
在Java中,int类型占用4个字节,即32位,而long类型占用8个字节,即64位。如果要将一个64位的long类型数据转成两个32位的int类型数据,可以使用位运算符。具体地,可以将这个64位数据分成高32位和低32位,然后分别转成两个int类型数据。
可以使用以下代码将一个long类型数据转成两个int类型数据:
```
long num = 1234567890123456789L; // 要转换的long类型数据
int high = (int) (num >> 32); // 高32位
int low = (int) num; // 低32位
```
其中,`>>`是右移位运算符,表示将二进制数向右移动指定的位数,被移出的位丢弃,空位补0。在这里,将num向右移动32位,即得到了高32位。由于num是long类型,所以需要将其转成int类型,可以使用强制类型转换。而对于低32位,直接将num转成int类型即可。
如果要将两个int类型数据还原成一个long类型数据,可以使用以下代码:
```
int high = 12345678; // 高32位
int low = 90123456; // 低32位
long num = ((long) high << 32) + (low & 0xFFFFFFFFL); // 合并成long类型数据
```
其中,`<<`是左移位运算符,表示将二进制数向左移动指定的位数,空位补0。在这里,将high向左移动32位,即得到了高32位。由于high是int类型,所以需要将其转成long类型,以免发生溢出。而对于低32位,需要将其转成long类型,并使用按位与运算符`&`将其与0xFFFFFFFFL相与,以消除高32位的影响。最后,将两个32位数据合并成一个64位数据即可。
java long 转 int
要将 `long` 类型转换为 `int` 类型,你可以使用类型转换操作符 `(int)` 或者使用 `Long.intValue()` 方法。
使用类型转换操作符:
```java
long num = 1234567890;
int result = (int) num;
```
使用 `Long.intValue()` 方法:
```java
long num = 1234567890;
int result = Long.valueOf(num).intValue();
```
需要注意的是,如果 `long` 类型的值超过了 `int` 类型的表示范围,会导致数据精度丢失或溢出。因此,在进行类型转换之前,请确保 `long` 类型的值在 `int` 类型的范围内。
阅读全文