Bit Mask
それぞれがONまたはOFFであるn個のフラグで決定される「状態」は、0,1,…,n−1 番目のフラグを1(ON)または0(OFF)で表した、1つのビット列で表すことができます。 ビット列は各桁が0または1である2進数として表されるため、状態は対応する1つの10進数の整数値として管理することができます。
また、マスクは特定のビットをONにしたビット列で、操作対象のビット列に適用することで、複数のフラグを同時にON/OFFしたり、特定のパタンのフラグの状態を抽出/除外したい場合などに用います。
64個のフラグからなる状態を管理するビット列に対して、あらかじめ与えられたいくつかのマスクを用いた以下の種類の操作を行ってください。ただし、初期状態でビット列の全てのフラグはOFFになっているものとします。
test(i): i番目のフラグの状態がONの場合は1、OFFの場合は0を出力する
set(m): 指定されたマスクが表す部分のフラグをまとめてONにする
clear(m): 指定されたマスクが表す部分のフラグをまとめてOFFにする
flip(m): 指定されたマスクが表す部分のフラグをまとめて反転する
all(m): 指定されたマスクが表す部分の全てのフラグがONになっている場合1、なっていない場合0を出力する
any(m): 指定されたマスクが表す部分のいずれかのフラグがONになっている場合1、なっていない場合0を出力する
none(m): 指定されたマスクが表す部分の全てのフラグがOFFになっている場合1、なっていない場合0を出力する
count(m): 指定されたマスクが表す部分のONになっているフラグの数を出力する
val(m): 指定されたマスクが表す部分の整数値を出力する