我有很长很短
我希望从短的位覆盖长的低阶16位。

Ex(为了可读性,分为16位块):

> long = 0xffff 0xffff 0xffff 0xffff
> short= 0x1234
>
> output = (long)0xffff 0xffff 0xffff 0x1234

最佳答案

static long foobar(long aLong, short aShort) {
    return aLong & 0xFFFFFFFFFFFF0000L | aShort & 0xFFFFL;
}

请注意,您必须在此处将short值与0xFFFFL进行“与”运算,否则,如果long大于或等于short,则sign extension会导致代码中断(无论结果高低位在0x8000中,结果中的所有高位都将被置位) 。

10-07 12:39