Java: как заменить последние 16 битов длинных короткими - PullRequest
6 голосов
/ 25 августа 2010

У меня есть длинное и короткое, я хочу, чтобы биты из короткого перезаписывали младшие 16 бит длинного.

Ex (разбиты на 16-битные порции для удобства чтения):

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

Ответы [ 2 ]

7 голосов
/ 25 августа 2010
static long foobar(long aLong, short aShort) {
    return aLong & 0xFFFFFFFFFFFF0000L | aShort & 0xFFFFL;
}

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

6 голосов
/ 25 августа 2010
long l = ...;
short s = ...;
long n = (l & ~0xFFFF) | (s & 0xFFFFL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...