Java:如何用short替换long的最后16位

Dav*_*rks 6 java bit-manipulation

我有一个很长的短路我希望短路中的位覆盖长的低位16位.

Ex(为了便于阅读,分为16位块):

> long = 0xffff 0xffff 0xffff 0xffff
> short= 0x1234
> 
> output = (long)0xffff 0xffff 0xffff 0x1234
Run Code Online (Sandbox Code Playgroud)

bca*_*cat 7

static long foobar(long aLong, short aShort) {
    return aLong & 0xFFFFFFFFFFFF0000L | aShort & 0xFFFFL;
}
Run Code Online (Sandbox Code Playgroud)

请注意,您必须在此处使用AND short0xFFFFL,否则符号扩展将导致代码中断(long如果short大于或等于,则将设置结果中的所有高位,无论其原始值如何)0x8000.


eri*_*son 6

long l = ...;
short s = ...;
long n = (l & ~0xFFFF) | (s & 0xFFFFL);
Run Code Online (Sandbox Code Playgroud)