問題

問8 次のプログラムの説明及びプログラムを読んで、設問1~3に答えよ。

 整数型関数BitTestは、8ピットのデータ中の指定したピット位置にあるピットの値を検査して、結果を返す。整数型関数BitCountは、8ビットのデータ中にある1のピットの個数を返す。

 なお、本問において、演算子“&”,“|”は、二つの8ビット論理型データの対応するビット位置のビット同士について、それぞれ論理積、論理和を求め. 8ビット論理型で結果を得るものとする。また、”~”Bという表記は、8ピット論理型定数を表す。

〔プログラム1の説明〕
 整数型関数BitTestを、次のとおりに宣言する。
 ○整数型関数:BitTest (8ビット論理型: Data,8ビット論理型:Mask)

 検査される8ビットのデータは入力用の引数Dataに、検査をするビット位置の情報は入力用の引数Maskに、それぞれ格納されている。Mask中のビットの値が1であるビット位置に対応したData中のビットを検査して、次の返却値を返す。ここで、Mask中には1のピットが1個以上あるものとする。

   返却値 0:検査した全てのピットが0
       1:検査したビット中に0と1が混在
       2:検査した全てのビットが1

 例えば、図1の例1では、Maskのビット番号7~5の3ビットが1であるので、Dataのビット番号7~5の3ビットの値を検査し、0と1が混在しているので返却値1を返す。例2では、Maskのビット番号4と0の2ビットが1であるので、Dataのビット番号4と0の2ビットの値を検査し、どちらも1であるので返却値2を返す。

図1 BitTestの実行例
図1 BitTestの実行例

〔プログラム1〕

プログラム1

〔プログラム2、3の説明〕
 整数型関数BitCountを、次のとおりに宣言する。
 ○整数型関数:BitCount (8ビット論理型:Data)
 検査される8ビットのデータは入力用の引数Dataに格納されている。
 このためのプログラムとして、基本的なアルゴリズムを用いたプログラム2と、処理効率を重視したプログラム3を作成した。

 プログラム2、3中の各行には、ある処理系を想定して、プログラムの各行を1回実行するときの処理量(1、2、…)を示してある。選択処理と繰返し処理の終端行の処理量は、それぞれの開始行の処理量に含まれるものとする。

 なお、演算子“-”は、両オペランドを8ビット符号なし整数とみなして、減算を行うものとする。

〔プログラム2〕

プログラム2

〔プログラム3〕

プログラム3