#include <iostream>
#include <boost/integer/integer_mask.hpp>
using namespace std;
int main()
{
int a = 100; // 2進表示で、01100100
// 下から5+1bit目のみ残す
int b = a & boost::high_bit_mask_t<5>::high_bit;
// 下5bitを全部残す
int c = a & boost::low_bits_mask_t<5>::sig_bits;
// 下から3+1bit目を立てる
int d = a | boost::high_bit_mask_t<3>::high_bit;
// 下3bitを全部立てる
int e = a | boost::low_bits_mask_t<3>::sig_bits;
if( b == 32 )
cout << "Ok_b" << endl;
if( c == 4 )
cout << "Ok_c" << endl;
if( d == 108 )
cout << "Ok_d" << endl;
if( e == 103)
cout << "Ok_e" << endl;
return 0;
}
ある変数Nの下から5bit目が立っているかどうか調べたいときは
N & 1<<(5-1)
とやったりするわけですが、
要するにそれです。