Как правильно извлечь числа из битового поля? Нужно в int-поле сохранить три числа:int a = 4, b = 7, c = 5;
int x = (c << 16) | (b <> 0 ) & 0xff;
b = (x >> 8) & 0x00ff;
c = (x >> 16) & 0x0000ffff;
Если нет, как правильно? *facepalm*
Ещё такой вопрос, как быть, если какое-то из чисел, например a, может принимать отрицательные значения?

21 Авг 2019 в 06:31
229 +1
0
Ответы
1

Да, ваш способ извлечения чисел из битового поля не совсем правильный. Правильно будет так:

a = x & 0xff;
b = (x >> 8) & 0xff;
c = (x >> 16) & 0xff;

Если число a может принимать отрицательные значения, то для сохранения его в битовом поле, следует использовать знаковый тип данных, например int8_t (из библиотеки ). В таком случае код может выглядеть так:

int8_t a = -4; // Пример отрицательного значения
int8_t b = 7;
int8_t c = 5;

int x = ((int)a & 0xff) | ((int)b << 8) | ((int)c << 16);

a = x & 0xff;
b = (x >> 8) & 0xff;
c = (x >> 16) & 0xff;

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

20 Апр 2024 в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир