java中2个int合并成一个long_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > java中2个int合并成一个long

java中2个int合并成一个long

 2011/11/21 7:56:10  hemowolf  http://hemowolf.iteye.com  我要评论(0)
  • 摘要:延续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位
  • 标签:Java 一个

? ?延续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;
}
发表评论
用户名: 匿名