Прежде всего, я хочу знать, возможно ли это: допустим, у меня есть беззнаковый лонг, который содержит несколько произвольных беззнаковых шорт, которые могут быть или не быть в числе. Например:
unsigned short int id1 = 3456,
id2 = 30998;
unsigned long long bitfld = id1|id2;
Могут ли другие 2 поля быть приняты за 0? И ИЛИ правильная ли операция для этого? После этого, скажем, я передаю bitfld в качестве аргумента:
void dostuff (unsigned long long bf)
{
//pseudo code
if( the first field exists in bf)
get first field;
if( the second field exists in bf)
get second field;
//etc...
}
Я думаю, что мне нужно опросить первые 16 битов битового поля и проверить их, затем рекурсивно опросить их, проверить их и сохранить, если они больше 0. Но я не уверен, как это сделать, бит сдвиг только сдвиг влево или вправо, таким образом, он только делит или умножает вправо?
извините за удар. Спасибо всем за ваши ответы, но в итоге я использовал более простой и эффективный метод - внутреннюю структуру. Видите ли, я мог бы легко сделать это с помощью строки, но моей целью была прозрачность для пользователя кода, простота программирования, так сказать.
Я создал внутреннюю структуру для хранения своих значений, а затем публичный метод для создания и возврата такой структуры, поэтому его легко использовать и быстрее анализировать (хотя он имеет дополнительные издержки на выделение в стеке (хотя и небольшой) структуры, которая решение битового поля не имеет, но увы).
Так что спасибо всем за ваши ответы.