Подходы, которые я всегда использовал, хотя и не такие элегантные, как у вас:
1 / Просто используйте гекс. Через некоторое время вы просто узнаете, какие шестнадцатеричные цифры представляют какие битовые комбинации.
2 / Используйте константы и ИЛИ или ДОБАВЬТЕ их. Например (могут потребоваться квалификаторы на битовых шаблонах, чтобы сделать их беззнаковыми или длинными):
#define b0 0x00000001
#define b1 0x00000002
: : :
#define b31 0x80000000
unsigned long x = b2 | b7
3 / Если производительность не критична, а читабельность важна, вы можете просто сделать это во время выполнения с помощью функции, такой как "x = fromBin (" 101011011 ");".
4 / В качестве хитрого решения вы можете написать предварительный препроцессор, который просматривает ваши файлы * .cppme и создает файлы * .cpp, заменяя все строки типа «0b101011011» их эквивалентными строками «0x15b» ). Я бы не стал делать это легко, так как есть множество хитрых комбинаций синтаксиса, о которых вам, возможно, придется беспокоиться. Но это позволит вам писать свою строку так, как вы хотите, не беспокоясь о капризах компилятора, и вы можете ограничить хитрость синтаксиса путем тщательного кодирования.
Конечно, следующим шагом после этого будет исправление GCC для распознавания констант "0b", но это может быть излишним: -)