我有很长很短
我希望从短的位覆盖长的低阶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
中,结果中的所有高位都将被置位) 。