将无符号32位整数分成两个可重建的16位数

时间:2017-05-21 15:45:54

标签: java binary

是否可以将Java中的无符号32位整数分成两个独立的16位数字,以后可以将它们相加以获得原始数字。

2 个答案:

答案 0 :(得分:3)

您可以使用按位操作,包括移位。

首先反汇编:

int original32 = 1000;
int high16 = original32 >>> 16;
int low16 = original32 & 0xFFFF;
System.out.println(high16);
System.out.println(low16);

这里,为了得到更低的16位,我们只是将值屏蔽为零,输出更高的16位。要获得更高的16位,我们将它们移到右边。

重建:

int rebuilt32 = (high16 << 16) | (low16 & 0xFFFF);
System.out.println(rebuilt32);

这里我们将高16位向左移,然后'加'(实际上,OR)低位。

答案 1 :(得分:1)

你可以使用bithifts和casts来做到这一点。

int i = 1000100010;
short lower = (short) i;
short upper = (short) (i >> 16);
int complete = lower | (upper << 16);