pulpul 日本の試験

ITストラテジスト 概念書 · 組込み・コンピュータシステム

ビット演算と2進数の加算

ビット演算は、整数を2進数で表したときの各桁に対して論理演算を行う操作であり、マスク処理やビットの抽出、フラグ操作などに使われる。2進数の加算は、各桁の和と桁上がりを論理ゲートで求めることで実現され、半加算器がその最も基本的な構成である。この二つは組込みシステムやCPUの演算器の理解に直結し、論理演算の性質と回路の対応の両面から問われやすい。

原理・仕組み

論理積(AND)は両方の入力が1のときだけ1を返し、論理和(OR)は少なくとも一方が1なら1を返す。排他的論理和(XOR)は入力が異なるときだけ1を返し、1桁の2進数の和の1桁目に相当する。整数同士のビット演算では同じ桁どうしが演算されるため、桁ごとの論理演算を理解することが出発点となる。

論理積をマスクとして使うと、特定の桁だけを残すことができる。255は2進数で8桁すべてが1なので、(n+1) AND 255は下位8ビットだけを残す操作になり、これは(n+1)を256で割った余りを求めることと同じ意味を持つ。

256は2進数で9桁目だけが1の値であり、256との論理積は9桁目だけを取り出す。一方、256との論理和は9桁目を1にする操作である。どちらの演算が求められているかは、定義された値の範囲と結果を照らし合わせて判断する。

1桁の2進数AとBを加えるとき、和の1桁目はXORで、桁上がりはANDで求められる。XORとANDを組み合わせた回路を半加算器と呼び、これが2進数の加算の最も基本的な構成である。

桁上がりを求める回路をORに置き換えると誤りになる。ORは、AとBの一方だけが1の場合にも1を出力してしまい、桁上がりが生じない入力で桁上がりを示すことになる。

判断の基準や数値

符号なしの8ビット整数は0から255までの値を表し、符号付き16ビット整数(2の補数)は−32,768から32,767までの値を表す。加算結果がこの範囲を超えるとオーバーフローとなる。符号が同じ二つの数の和は、絶対値が大きくなって範囲を超える可能性がある。一方、符号が異なる二つの数の和は、もとの二つの値の間に収まるため、オーバーフローは起きない。

この節の続き

ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。

アプリでこの節を読む