延续32位时代的逻辑通常只会在32位整数中取出高16位和低16位的短整数(short)或相反的合并操作,如c/c++语系中loword和hiword。现在64位的cpu普及到已是标配了,所以这种经典的算法也会在64位的long中也会有相应的应用。我在使用中则遇到了一些问题,记录下备忘。
需要取32位int的高低16位,或是合并2个int到64位中,即是通过cpu中最基本的"与"、"或"和位移算法来实现。如想要取64位的高32位,那么是通过"与"算法屏蔽掉低32位再把高32位移动到低32位,最后存储到32位的寄存器里。合并则反之操作。
下面贴代码
合并2个32位整数到64位
public static long combineInt2Long(int low, int high) {
return ((long)low & 0xFFFFFFFFl) | (((long)high << 32) & 0xFFFFFFFF00000000l);
}
需要注意的是一定要把low和hight先转换成long在进行或运算,不然一定会出错的。
取64位整数的高低32位
public static int[] separateLong2int(Long val) {
int[] ret = new int[2];
ret[0] = (int) (0xFFFFFFFFl & val);
ret[1] = (int) ((0xFFFFFFFF00000000l & val) >> 32);
return ret;
}
分享到:
相关推荐
在 hebing 方法中,我们使用了位运算来将四个 byte 型的值合并成一个 int 型。位运算是指对二进制数进行的操作,例如与运算(&)、或运算(|)、异或运算(^)等。在这里,我们使用了或运算(|)来将四个 byte 型的...
任务是将这些石子有序地合并成一堆。每次只能选择两堆相邻的石子进行合并,新合并的一堆石子数为这两堆石子数之和,并且这次合并的得分被定义为新堆的石子数。目标是设计一个算法,计算出将\( n \)堆石子合并成一堆...
混音是指将两个或多个音频流合并成一个。这通常涉及同时解码多个音频源,然后将它们的输出数据合并到一个缓冲区。Android的`MediaCodec`支持多通道音频,因此可以在解码后直接合并。 ```java MediaCodec[] decoders...
Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...
结合上述两个部分,我们可以设计一个完整的Java程序,用于批量下载文件并将其压缩成ZIP文件。具体实现细节可以根据具体需求进行调整,例如添加命令行参数支持、更丰富的异常处理机制等。 通过本文的介绍,读者可以...
- Jar文件是一种Java归档文件,它将多个文件合并成一个文件,用于节省空间和提高加载速度。 - Jar文件也可以用于分发Java应用程序。 9. 路径类型: - 绝对路径以系统根目录(如/或C:\)开头。 - 相对路径不以...
- **SequenceOutputStream**:将多个输出流合并成一个输出流。 #### 2. 字符流 字符流主要用于处理文本数据,它支持Unicode编码。字符流同样可以分为输入流(Reader)和输出流(Writer)。 - **Reader**:表示从...
即如果第一个操作数为false,则不会评估第二个操作数,从而可能提高效率或避免不必要的计算。 **4、跳出多重嵌套循环** 可以通过定义一个外部标签来标记最外层的循环,然后在内层循环中使用`break`语句加外部标签的...
`这一行代码中,由于字符串常量池的优化,实际上可能只会创建一个`String`对象,因为编译器可能会将这些字符串常量合并成一个。 #### 38\. `try-catch-finally`结构 在`try`块中的`return`语句之前,`finally`块会...
然而,在某些应用场景下,比如数据库存储、数据处理或网络通信协议中,可能需要将IP地址转换成一个整数值来方便处理。本文将详细探讨如何将IPv4地址转换为十进制整数以及反向转换的过程。 #### IP地址转十进制整数 ...
组合操作符用于将多个`Observable`合并成一个,如`zip`、`merge`等。 ##### 条件判断操作符 条件判断操作符允许我们在数据流中根据条件执行不同的逻辑,如`amb`、`takeUntil`等。 ##### 错误处理 错误处理是响应...
此外,Java支持复合赋值运算符,如 `+=`、`-=`、`*=` 和 `/=`,它们可以将运算和赋值合并成一个操作。例如: - `int a = 2; a += 3;` 相当于 `a = a + 3;`,`a` 的值将变为 `5`。 在进行算术运算时,需要注意数据...
在计算机科学中,处理大整数乘法是一项挑战性的任务,特别是在传统整型数据结构(如`int`或`long`)无法满足需求时。Java语言提供了强大的库支持来处理大整数,但自定义算法可以提供更深入的理解和潜在的性能提升。...