java合并整形_java中2个int合并成一个long
延續32位時代的邏輯通常只會在32位整數中取出高16位和低16位的短整數(short)或相反的合并操作,如c/c++語系中loword和hiword?,F在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;
}
總結
以上是生活随笔為你收集整理的java合并整形_java中2个int合并成一个long的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提取文件出错_提取中文、英文和数字,其实
- 下一篇: 为什么高层楼房还有蟑螂?