部分ビット列を列挙
1011001というようなmaskが与えられた時に、1001000だとかmaskに含まれるビット列(0を除く)を列挙する方法。
私は
for ( int m = 1; m <= mask; m ++ ) if ( ( m | mask ) == mask )
とやってたけど、
for ( int m = mask; m > 0; m = ( m - 1 ) & mask )
とやれば全く無駄がないことを知った。
1011001というようなmaskが与えられた時に、1001000だとかmaskに含まれるビット列(0を除く)を列挙する方法。
私は
for ( int m = 1; m <= mask; m ++ ) if ( ( m | mask ) == mask )
とやってたけど、
for ( int m = mask; m > 0; m = ( m - 1 ) & mask )
とやれば全く無駄がないことを知った。