Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

libs/dynamic_bitset/example/example3.cpp

// Copyright (c) 2001 Jeremy Siek
// Copyright (c) 2008 Gennaro Prota
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// Sample run:
//
// mask     = 101010101010
// x.size() = 0
// Enter a bitset in binary: x = 100100010
//
// Input number:             100100010
// x.size() is now:          9
// As unsigned long:         290
// Mask (possibly resized):  010101010
// And with mask:            000100010
// Or with mask:             110101010
// Shifted left by 1:        001000100
// Shifted right by 1:       010010001



#include "boost/dynamic_bitset.hpp"

#include <ostream>
#include <iostream>

int main()
{
    boost::dynamic_bitset<> mask(12, 2730ul);
    std::cout << "mask     = " << mask << std::endl;

    boost::dynamic_bitset<> x;
    std::cout << "x.size() = " << x.size() << std::endl;

    std::cout << "Enter a bitset in binary: x = " << std::flush;
    if (std::cin >> x) {
        const std::size_t sz = x.size();
        std::cout << std::endl;
        std::cout << "Input number:             " << x << std::endl;
        std::cout << "x.size() is now:          " << sz << std::endl;

        bool fits_in_ulong = true;
        unsigned long ul = 0;
        try {
            ul = x.to_ulong();
        } catch(std::overflow_error &) {
            fits_in_ulong = false;
        }

        std::cout << "As unsigned long:         ";
        if(fits_in_ulong) {
            std::cout << ul;
        } else {
            std::cout << "(overflow exception)";
        }

        std::cout << std::endl;

        mask.resize(sz);

        std::cout << "Mask (possibly resized):  " << mask << std::endl;

        std::cout << "And with mask:            " << (x & mask) << std::endl;
        std::cout << "Or with mask:             " << (x | mask) << std::endl;
        std::cout << "Shifted left by 1:        " << (x << 1) << std::endl;
        std::cout << "Shifted right by 1:       " << (x >> 1) << std::endl;
    }
    return 0;
}