在Java中,Integer是32位,而Short是16位。
我试图将2 Short组合为一个整数,并希望将其还原一段时间。
一个Short值存储在较高的16位,另一个存储在较低的16位。
例如,我希望将2个Short值(99、100)存储在一个Integer x中,并在某个时间将其提取出来。
起初,我尝试了位运算(<< 16),但是无法恢复两个数字。
答案 0 :(得分:1)
如果值可以为负,则需要花费更多的精力来处理下半部分的符号:
int combined = (high << 16) | (low & 0xFFFF);
不需要强制转换,它们是隐式发生的。但是& 0xFFFF
部分必须避免在low
为负的情况下用上半部分覆盖高半部分。
像这样分割仍然很简单:
short high = (short)(combined >> 16);
short low = (short)combined;
答案 1 :(得分:0)
您可以拆分16位的前半部分和后半部分,以将short值存储在int中。然后从该int提取短裤到两个short。这是一个示例:
public class ShotToInt {
public static void main(String[] args) {
short x, y;
x = 101;
y = 500;
// creating the int by storing x in first half and y in last half.
int xy = ((int) x << 16) | y;
System.out.println("x=" + x + " y=" + y);
System.out.println("in bit: " + Integer.toBinaryString(x) + ":" + Integer.toBinaryString(y));
System.out.println("in bit: " + Integer.toBinaryString(xy));
// shifting bits to 16 digit to restore the x
short xx = (short) (xy >> 16);
// directly casting to short to extract y
short yy = (short) xy;
System.out.println("x=" + xx + " y=" + yy);
System.out.println("in bit: " + Integer.toBinaryString(xx) + ":" + Integer.toBinaryString(y));
assert x == xx;
assert y == yy;
}
}