java合并整形_java中2个int合并成一个long
延續(xù)32位時(shí)代的邏輯通常只會(huì)在32位整數(shù)中取出高16位和低16位的短整數(shù)(short)或相反的合并操作,如c/c++語(yǔ)系中l(wèi)oword和hiword?,F(xiàn)在64位的cpu普及到已是標(biāo)配了,所以這種經(jīng)典的算法也會(huì)在64位的long中也會(huì)有相應(yīng)的應(yīng)用。我在使用中則遇到了一些問(wèn)題,記錄下備忘。
需要取32位int的高低16位,或是合并2個(gè)int到64位中,即是通過(guò)cpu中最基本的"與"、"或"和位移算法來(lái)實(shí)現(xiàn)。如想要取64位的高32位,那么是通過(guò)"與"算法屏蔽掉低32位再把高32位移動(dòng)到低32位,最后存儲(chǔ)到32位的寄存器里。合并則反之操作。
下面貼代碼
合并2個(gè)32位整數(shù)到64位
public static long combineInt2Long(int low, int high) {
return ((long)low & 0xFFFFFFFFl) | (((long)high << 32) & 0xFFFFFFFF00000000l);
}
需要注意的是一定要把low和hight先轉(zhuǎn)換成long在進(jìn)行或運(yùn)算,不然一定會(huì)出錯(cuò)的。
取64位整數(shù)的高低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;
}
總結(jié)
以上是生活随笔為你收集整理的java合并整形_java中2个int合并成一个long的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 提取文件出错_提取中文、英文和数字,其实
- 下一篇: 为什么高层楼房还有蟑螂?