I have a long and a short I want the bits from the short to overwrite the low order 16 bits of the long.
Ex (broken into 16bit chunks for readability):
> 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;
}
Обратите внимание, что вы должны И для короткого значения
указать здесь 0xFFFFL
, иначе расширение знака приведет к нарушению кода ( все старшие биты в результате будут установлены, независимо от их исходного значения в long
), если short
больше или равно 0x8000
.
long l = ...;
short s = ...;
long n = (l & ~0xFFFF) | (s & 0xFFFFL);