Не надо быть знатоком Си :) Накладывайте маску
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 компиляторах Си мне встречалась только реализация, когда первое поле соответствовало младшему биту, но это не значит, что нет "противоположной" реализации. Что касается сгенерированного компилятором кода, то для всех трех случаев он будет один и тот же.