■概要
本稿では、Pythonのプログラミングにおける、以下の2点について解説する。
・ビット演算(AND、OR、XOR)の計算処理
・OR演算を使用したマスタチェック処理
■論理演算
論理演算は、0(FALSE)または1(TRUE)をとる値について計算する。
今回は、「AND」、「OR」、「XOR」のビット演算について説明する。
・AND:論理積
「a」および「b」の両方が「1」である場合、「1」を返す。
それ以外は、「0」を返す。
・OR:論理和
「a」または「b」の少なくとも片方が「1」である場合、「1」を返す。
それ以外は、「0」を返す。
・XOR:排他的論理和
「a」または「b」の片方が「1」である場合、「1」を返す。
それ以外は、「0」を返す。
■ビット演算
ビット演算を机上で行う場合は、以下の操作を行う。
①2進数に変換する。
②桁数(1の位、2の位、4の位・・・)ごとに計算する。
③計算結果を10進数に戻す。
なお、Python でビット演算を行う場合は、10進数のまま計算してくれる。
<参考:N進数・10進数の演算>
・N進数から10進数の計算処理
・10進数からN進数の計算処理
▼ANDの演算
「a = 6」、「b = 2」のAND演算を行うと、
「110」AND「010」=「010」(2)となる。
pythonによるAND演算を行う場合は「&」を使用する。
a = 6
b = 2
print('a AND b : ', a & b)
# 実行結果
# a AND b : 2
▼ORの演算
「a = 6」、「b = 2」のOR演算を行うと、
「110」OR「010」=「110」(6)となる。
pythonによるOR演算を行う場合は「|」を使用する。
a = 6
b = 2
print('a OR b : ', a | b)
# 実行結果
# a OR b : 6
▼XORの演算
「a = 6」、「b = 2」のXOR演算を行うと、
「110」XOR「010」=「100」(4)となる。
pythonによるXOR演算を行う場合は「^」を使用する。
a = 6
b = 2
print('a XOR b : ', a ^ b)
# 実行結果
# a XOR b : 4
■OR演算を使用したマスタチェック処理
ビット演算の「OR演算」を利用して、指定したデータがすべて正しいかどうか判定することができる。
データ項目を桁数(1の位、2の位、4の位、8の位・・・)に指定し、初期値を「0」に設定した後、各桁(データ)項目が正しい場合は「1」をOR演算で追加していく。
最終的に全ての桁(データ)が正しいか判定し、データの確らしさを判断可能となる。
▼作成するプログラムの概要
3つのマスタデータについて正しさを判定する処理をOR演算を使用して実装する。
正しいマスタデータは以下とする。
・マスタデータ1:aaa
・マスタデータ2:bbb
・マスタデータ3:ccc
▼フローチャート
▼プログラム仕様
・マスタデータチェック関数
<引数と戻り値>
項目 | 型 | 項目内容 |
---|---|---|
引数 | 辞書型 | マスタデータを設定する。 キー項目は以下の通り。 ・マスタデータ1 ・マスタデータ2 ・マスタデータ3 |
戻り値 | 文字列型 | 【チェックが正しい場合】 OK 【チェックが正しくない場合】 NG |
<処理内容>
入力 | 処理内容 | 出力 |
---|---|---|
– | チェック用変数の初期値セットする。 初期値:0 ※OR演算で使用する。 | – |
– | ▼条件分岐:マスタデータ1 |【値がaaaの場合】 |OR演算を行う。:「000 OR 001」→「001」 |【その他】 |何もしない。 ▲ | – |
– | ▼条件分岐:マスタデータ2 |【値がbbbの場合】 |OR演算を行う。:「001 OR 010」→「011」 |【その他】 |何もしない。 ▲ | – |
– | ▼条件分岐:マスタデータ3 |【値がcccの場合】 |OR演算を行う。:「011 OR 100」→「111」 |【その他】 |何もしない。 ▲ | – |
– | ▼条件分岐:チェック用変数の値 |【7(2進数:111)の場合】 |「OK」を返す。・・・① |【その他】 |「NG」を返す。・・・② ▲ | 【戻り値】 ①OK ②NG |
▼サンプルコード
# マスタデータチェック関数
def CheckMasterData(mst_data):
# チェック用変数の初期値セット
check_num = 0
# マスタデータ1チェック
if mst_data['mst1'] == 'aaa':
# OR演算:「000 OR 001」→「001」
check_num = check_num | 1
# マスタデータ2チェック
if mst_data['mst2'] == 'bbb':
# OR演算:「001 OR 010」→「011」
check_num = check_num | 2
# マスタデータ3チェック
if mst_data['mst3'] == 'ccc':
# OR演算:「011 OR 100」→「111」
check_num = check_num | 4
# 2進数「111」(10進数で7)になったらチェックOK
if check_num == 7:
return 'OK'
else:
return 'NG'
if __name__ == '__main__':
# 各マスタデータをセット
dict_mst_data1 = {'mst1': 'aaa', 'mst2': 'bbb', 'mst3': 'ccc'}
dict_mst_data2 = {'mst1': 'yyy', 'mst2': 'bbb', 'mst3': 'ccc'}
dict_mst_data3 = {'mst1': 'bbb', 'mst2': 'aaa', 'mst3': 'ccc'}
# 各マスタデータが正しいかチェック
print('マスタデータ1:', CheckMasterData(dict_mst_data1))
print('マスタデータ2:', CheckMasterData(dict_mst_data2))
print('マスタデータ3:', CheckMasterData(dict_mst_data3))
▼実行結果
マスタデータ1: OK
マスタデータ2: NG
マスタデータ3: NG
コメント