4.12.1 BOOST_BINARY
BOOST_BINARY提供一组宏,用于实现简单的二进制常量表示。
BOOST_BINARY的定义位于<boost/utility/binary.hpp>中,也可以通过<boost/ utility.hpp>间接包含,即:
- #include <boost/utility/binary.hpp> //或者
- #include <boost/utility.hpp>
它使用boost.preprocessor预处理元编程(www.cppentry.com)工具将一组或多组01数字在编译期展开成为一个八进制数字。每个数字组之间可以用空格分隔,每组可以容纳1个到8个0/1数字。
这里特别要注意的是,数字组的长度一定不能超过八个,由于预处理器宏展开的限制,嵌套层次太深会导致无法通过编译,报出一大堆错误。
示范BOOST_BINARY用法的例子如下:
- #include <boost/utility.hpp>
- ...
- cout << hex << showbase;
- cout << BOOST_BINARY(0110) << endl;
- cout << BOOST_BINARY(0110 1101) << endl;
- cout << BOOST_BINARY(10110110 01) << endl;
- cout << bitset<5>(BOOST_BINARY(0110)) << endl;
运行输出结果如下:- 0x6
- 0x6d
- 0x2d9
- 00110
除了最基本最通用的BOOST_BINARY宏之外,本组件还包含形如BOOST_BINARY_XXX的宏,其中的XXX是标准的整数后缀,如U(unsigned int)、UL(unsigned long)等,用以支持需要特定整数类型的地方。例如,如果编译器支持long long(64位整数),则对应的宏是BOOST_BINARY_LL。
示范这些宏用法的代码如下:
- cout << BOOST_BINARY_UL(101 1001) << endl;
- long long x = BOOST_BINARY_LL(1101);
- cout << x << endl;
BOOST_BINARY宏提供了很好的初始化操作方法,在某些需要按位操作的情况下特别有用,比如使用std::bitset 。而且BOOST_BINARY宏都是在编译期展开的,没有任何运行时开销。