Вопрос № 91066: Здравствуйте уважаемые эксперты.
Язык Си. В чем разница между оперциями с битовыми полями и операциями с целыми? Поясняю в приложении. Какие выгоды или недостатки каждой из этих операций?
..
Вопрос № 91.066
Здравствуйте уважаемые эксперты.
Язык Си. В чем разница между оперциями с битовыми полями и операциями с целыми? Поясняю в приложении. Какие выгоды или недостатки каждой из этих операций?
Отвечает: Алексей Демаков
Здравствуйте, Васильев Сергей!
В случае целых можно использовать произвольную маску для проверки значений нескольких битов, для битовых полей такого сделать не получится:
if( (mybits & 0x36)==0 )
С другой стороны, над полями структуры проще делать арифметические операции:
int s = mybits.f1 + ... + mybits.f8;
При выборе структур данных стоит руководствоваться операциями, которые над ними придется выполнять чаще всего. Разница в производительности проявится в очень редких случаях, о которых заранее думать почти нет смысла. Обычно локальную оптимизацию выполняют после написания программы и ее профилирования (то есть подсчета времени, затраченного на выполнение отдельных участков кода).
Ответ отправил: Алексей Демаков (статус: Студент)
Ответ отправлен: 12.06.2007, 15:11 Оценка за ответ: 5 Комментарий оценки: Спасибо. Исчерпывающий ответ.
Отвечает: Vest
Здравствуйте, Васильев Сергей!
Ещё можно использовать для конвертирования из чисел в структуры. Да кстати, структуры могут быть больше чем sizeof(int). Очень полезно, когда ты имеешь в серёдке числа, несколько общих битов, которые разделять неудобно.
Иногда в серёдке существуют неиспользуемые битовый поля (например для задела на будущее, или для создания некоторых шаблонов с "дырками" по середине)
Приложение:
--------- "Халявы не бывает" (c)
Ответ отправил: Vest (статус: 5-ый класс)
Ответ отправлен: 12.06.2007, 16:06 Оценка за ответ: 4 Комментарий оценки: Спасибо, вы подсказали мудрую мысль. Но пример плох. Я спрашивал простарый добрый Си без плюсов, который большинство наверное уже забыли.