繁体   English   中英

将无符号 32 位整数拆分为两个可以重建的 16 位数字

[英]Split Unsigned 32-bit Integer into Two 16-bit numbers that can be rebuilt

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

您可以使用按位运算,包括移位。

首先拆解:

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)低位。

您可以通过使用位移和强制转换来实现这一点。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM