unsigned long bitset;
for(int i; i < 32; i++) {
do_something((bitset & (1 << i)) >> i);
}
Можно и так
#define FIRST_FIELD_NAME 0
#define SECOND_FIELD_NAME 1
// ...
#define REF_FIELD(bitset, index) (((bitset) & (1 << (index))) >> (index))
Хотя если C++, то посмотри vector<bool> - он специфицирован как раз чтоб работать с битами. Кроме того можешь сам перегрузить какой нить оператор (лучше всего operator[]), для работы с конкретными полями