Битшифтинг для чтения / записи данных - PullRequest
0 голосов
/ 18 марта 2011

Я отправляю 2 целых числа как одно длинное в Java, и не могу до конца жизни понять, как правильно передать их, используя сдвиг битов.

У меня есть метод для создания длинного:

public long create(int one, int two){
return      (one <<32 & two);
}

Прежде всего, это правильно? (Чтобы отправить два целых числа в один длинный вместе)

Во-вторых, если я хочу получить доступ к одному или двум, как мне это сделать?

Это простой случай:

   public static int getOne(long theLong) {
        return (int)theLong >> 32;

    }

Или есть что-то более сложное?

Некоторые рекомендации очень ценятся, спасибо!

Ответы [ 2 ]

1 голос
/ 18 марта 2011

При смещении значения int второй оператор (ширина смещения) имеет значение & 'с 31, поэтому someInt << 32 равно someInt.Примените int к long перед сдвигом: (long) someInt << 32, теперь это даст ожидаемый результат.

0 голосов
/ 18 марта 2011

Попробуйте

public long create(int one, int two){
    return ((long) one << 32) | (two & 0xFFFFFFFFL);
}

Способ отправки данных должен поддерживать несколько значений int, если он поддерживает long, например. для DataOuput используется writeInt() вместо writeLong()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...