プリプロセッサで基数変換
10進数→2進数
実装は非常に簡単(http://melpon.org/wandbox/permlink/NKeqHAbRSTsYap0a)
#include <boost/preprocessor.hpp> #define PRED(n, state) BOOST_PP_TUPLE_ELEM(2, 1, state) #define OP(d, state) \ (BOOST_PP_CAT(BOOST_PP_MOD(BOOST_PP_TUPLE_ELEM(2, 1, state), 2), \ BOOST_PP_TUPLE_ELEM(2, 0, state)), \ BOOST_PP_DIV(BOOST_PP_TUPLE_ELEM(2, 1, state), 2)) #define BINARY(n) \ BOOST_PP_IF(n, BOOST_PP_TUPLE_ELEM( \ 2, 0, BOOST_PP_WHILE(PRED, OP, (BOOST_PP_EMPTY(), n))), \ 0) BINARY(0) BINARY(1) BINARY(15) BINARY(127)
出力
0 1 1111 1111111
しかし、どうせBOOST_PPをもってしても除算などが255までしか扱えないなら変換テーブル作ってしまえばいいですね…。
BINARY0 0 ... BINARY127 1111111 BINARY(num) BOOST_PP_CAT(BINARY, num)