ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
73280 Топик полностью
Алексей Мусин (01.11.2006 06:51, просмотров: 1) ответил shandrei на Вопрос к знатокам Си.
Не надо быть знатоком Си :) Накладывайте маску
if (x & (1<<3))
{
    /* 3-й бит равен 1 */
}
else
{
    /* 3-й бит равен 0 */
}
Иногда встречаются способы с макросами, например,
if (BIT (x, 3))(
Я стараюсь избегать макросов. Еще одно решение - использование битовых полей (bit-fields). Это решение очень наглядное и удобное: можно в структуре задать формат данных и обращаться к ее битовым полям. Но с ними есть потенциальная непереносимость кода из-за неопределенности расположения битов "по старшинству". Цитата из драфта стандарта Си: The order of allocation of bit-fields within a unit (high-order to low-order or low-order to high-order) is implementation-defined. На порядка 3-4 компиляторах Си мне встречалась только реализация, когда первое поле соответствовало младшему биту, но это не значит, что нет "противоположной" реализации. Что касается сгенерированного компилятором кода, то для всех трех случаев он будет один и тот же.