@synapse_people

Как уложить 2 цифры по 4 бита в 1 байт?

Имеем
int x = ?, y = ?;
как можно взять по 4 бита и уложить в 1 байт, то есть таким образом:
0000 | 0000
^ - X| ^ - Y

То есть нужно получить возможность положить 2 координаты в 1 байт и вычитать их обратно...
int x, y;
byte b;
b=Coords.pack(x,y);
...
x = Coords.unpackX(b); y = Coords.unpackY(b)
  • Вопрос задан
  • 459 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Для этого существуют битовые операции.
Сдвиг <<, >>
Логическиe И и ИЛИ &, |
packed = ((x& 0xf) << 4) | (y & 0xf) - это упаковка
y = packed & 0xf
x = (packed >> 4) & 0xf

0xf - это двоичное 1111
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Moskus
@Moskus
Если вы хотите хранить X в четырех старших битах и Y в четырех младших, для получения "упакованного" формата вам нужно всего-навсего умножить X на десятичное число шестнадцать (двоичное 10000), а потом прибавить Y. Для обратной операции можно, например, упакованное число поделить на десятичное шестнадцать целочисленно (отбросив дробную часть) - получите X, а путем вычитания из упакованного числа X*16, получите Y.
Но это неоптимальные варианты, естественно.

И что это за такие странные целые координаты от нуля до пятнадцати?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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