基本情報技術者試験対策(75)「擬似言語(36)ビット列(5)8ビット型(論理演算の組合せ)」

スポンサーリンク
IT系

論理演算の組合せ

論理演算を組み合わせることで、以下の結果が求められる。

$A \land B$(論理積 / AND)

「AとBのどちらも成り立つときだけ正解(真)になる」というルールである。

$A \land B$により、A のうち、Bが1である部分のみを抜き出す。
ビットマスクともいう。 例は、以下の通りである。

A∧(A-1)

A∧(A-1)により、1である右端ビットよりも左側部分だけを抜き出す。
言い換えれば、「Aの一番右端にある10に変える」という操作である。
A から1を引くと、ビットの状態は次のように変化する。

  1. 一番右側にある 10 に変わる。
  2. その さらに右側にある 0 がすべて 1 に変わる。
  3. それより左側のビットは変わらない。

この状態で、元の A と論理積(AND)をとると、変化した部分がすべて 0 になる。
なお、「A∧(A-1)により、1である右端ビットよりも左側部分だけを抜き出す」例は、以下の通りである。

$A \land (A – 1)$ は、一番右の 1 を消去する魔法の式。
2のべき乗の判定ビットカウントの高速化 に使われる。

A V B(論理和 / OR)

A V Bにより両者の1の部分を合体する。 ビットセットともいう。
「どちらか片方でも 1(真)なら、結果は 1(真)になる」というルールである。

プログラミングでは | という記号で書かれることが多く、ビット操作においては主に「特定のビットを強制的に 1 にする(フラグを立てる)」目的で使われる。

例は、以下の通りである。

ビット操作において OR は、「今の状態を壊さずに、特定のフラグを ON にする」ときに力を発揮する。

$A \oplus 11111111$(XOR演算)

$A \oplus 11111111$により、Aの全ビットを反転させる。
これはビット操作の中でも非常にスマートでよく使われるテクニックである。

例は、以下の通りである。

「1 と XOR をとる」ことは「ビットを反転させる」ことと同じ意味になる。そのため、すべてのビットが 1 である 11111111 と XOR をとれば、全ビットがひっくり返る(NOT演算と同じ結果になる)。

ビット操作の「3大基本」

ビット操作を使いこなすには、AND、OR、XOR の 3つを「やりたいこと」に合わせて使い分けるのがコツである。

演算子役割イメージ
AND ($\land$)取り出す・消す特定の場所が 1 かどうか確認する(マスク)
OR ($\lor$)セットする特定の場所を強制的に 1 にする
XOR ($\oplus$)反転させる10 に、01 に入れ替える

参考
 情報処理教科書 出るとこだけ!基本情報技術者[科目B]第4版 橋本 祐史 (著) 翔泳社


コメント

タイトルとURLをコピーしました