java 把64位long,转成2个32位的Int,再回转成long
时间: 2023-11-09 22:07:42 浏览: 230
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
在Java中,可以使用类型转换将一个`long`类型的值转换为`int`类型。请注意,在将`long`转换为`int`时,可能会发生数据丢失,因为`int`类型的取值范围比`long`类型小。
以下是一个示例代码,演示如何将`long`类型的值转换为`int`类型:
```java
long longValue = 1234567890L;
int intValue = (int) longValue;
```
在上面的代码中,我们将一个`long`类型的变量`longValue`转换为`int`类型的变量`intValue`。使用括号将目标类型`(int)`放在要转换的值`longValue`之前。
需要注意的是,如果`longValue`的值超出了`int`类型的取值范围,那么转换结果可能会不准确。在进行转换之前,请确保你已经考虑了这一点,并根据具体情况进行处理。
阅读全文