example3.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright (c) 2001 Jeremy Siek
  2. // Copyright (c) 2008 Gennaro Prota
  3. // Distributed under the Boost Software License, Version 1.0. (See
  4. // accompanying file LICENSE_1_0.txt or copy at
  5. // http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. // Sample run:
  8. //
  9. // mask = 101010101010
  10. // x.size() = 0
  11. // Enter a bitset in binary: x = 100100010
  12. //
  13. // Input number: 100100010
  14. // x.size() is now: 9
  15. // As unsigned long: 290
  16. // Mask (possibly resized): 010101010
  17. // And with mask: 000100010
  18. // Or with mask: 110101010
  19. // Shifted left by 1: 001000100
  20. // Shifted right by 1: 010010001
  21. #include "boost/dynamic_bitset.hpp"
  22. #include <ostream>
  23. #include <iostream>
  24. int main()
  25. {
  26. boost::dynamic_bitset<> mask(12, 2730ul);
  27. std::cout << "mask = " << mask << std::endl;
  28. boost::dynamic_bitset<> x;
  29. std::cout << "x.size() = " << x.size() << std::endl;
  30. std::cout << "Enter a bitset in binary: x = " << std::flush;
  31. if (std::cin >> x) {
  32. const std::size_t sz = x.size();
  33. std::cout << std::endl;
  34. std::cout << "Input number: " << x << std::endl;
  35. std::cout << "x.size() is now: " << sz << std::endl;
  36. bool fits_in_ulong = true;
  37. unsigned long ul = 0;
  38. try {
  39. ul = x.to_ulong();
  40. } catch(std::overflow_error &) {
  41. fits_in_ulong = false;
  42. }
  43. std::cout << "As unsigned long: ";
  44. if(fits_in_ulong) {
  45. std::cout << ul;
  46. } else {
  47. std::cout << "(overflow exception)";
  48. }
  49. std::cout << std::endl;
  50. mask.resize(sz);
  51. std::cout << "Mask (possibly resized): " << mask << std::endl;
  52. std::cout << "And with mask: " << (x & mask) << std::endl;
  53. std::cout << "Or with mask: " << (x | mask) << std::endl;
  54. std::cout << "Shifted left by 1: " << (x << 1) << std::endl;
  55. std::cout << "Shifted right by 1: " << (x >> 1) << std::endl;
  56. }
  57. return 0;
  58. }