Java: How to replace last 16 bits of a long with a short

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
6
задан David Parks 25 August 2010 в 01:05
поделиться

2 ответа

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

Обратите внимание, что вы должны И для короткого значения указать здесь 0xFFFFL , иначе расширение знака приведет к нарушению кода ( все старшие биты в результате будут установлены, независимо от их исходного значения в long ), если short больше или равно 0x8000 .

7
ответ дан 8 December 2019 в 18:29
поделиться
long l = ...;
short s = ...;
long n = (l & ~0xFFFF) | (s & 0xFFFFL);
6
ответ дан 8 December 2019 в 18:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: