ビット演算とは?仕組みとビット幅をわかりやすく解説

この記事の要点

値をすぐに計算したい方へ

ビット演算ツールなら、計算結果と各ビットの処理を同時に確認できます。

ビット演算ツールを使う

ビット演算とは何か

ビット演算とは、整数を2進数のビット列として見て、同じ位置にあるビット同士を直接操作する計算です。通常の足し算や掛け算が数値全体を対象にするのに対し、ビット演算は1桁ずつ0または1を判定します。

たとえば10進数の12は、8ビットの2進数では00001100です。各桁にANDやORを適用すると、必要な部分だけを残したり、指定した桁を1にしたりできます。

2進数とビットの関係

1ビットは0または1のどちらかを表します。右端から順に1、2、4、8、16…の重みを持ち、1になっている桁の値を足すと10進数になります。

2進数: 0 0 0 0 1 1 0 0 重み: 128 64 32 16 8 4 2 1 計算: 8 + 4 = 12

16進数は4ビットを1桁で表せるため、長いビット列を短く書くときに便利です。00001100は16進数で0Cになります。

代表的なビット演算

AND

両方が1の桁だけを1にします。マスクした範囲の抽出やフラグ判定に使います。

OR

どちらかが1なら1にします。特定のフラグを立てる操作に使います。

XOR

2つのビットが異なるときだけ1にします。差分検出やフラグの切り替えに使います。

NOT

0を1、1を0に反転します。結果は指定したビット幅によって変わります。

シフト

ビット列を左右へ移動します。2の累乗による乗除算やフィールド位置の調整に使います。

ローテート

端から出たビットを反対側へ戻します。暗号やハッシュなどの処理で使われます。

ビット幅が重要な理由

ビット幅は、値を何桁の2進数として扱うかを決めます。8ビットなら00000000から11111111までです。幅を超えた上位ビットは切り捨てられます。

8ビット: NOT 00001111 = 11110000 16ビット: NOT 00000000 00001111 = 11111111 11110000

同じ15をNOTしても、8ビットでは240、16ビットでは65520になります。ツールやプログラムで結果を比較するときは、演算前にビット幅をそろえてください。

SignedとUnsignedの違い

Unsigned(符号なし)は全ビットを値として使います。8ビットなら0〜255です。Signed(符号付き)は通常、最上位ビットを含む2の補数表現で負数を表し、8ビットなら−128〜127になります。

ビット列11111111は、Unsignedでは255、Signedでは−1です。ビット列そのものは同じでも、読み方によって10進数の意味が変わります。

ビット演算が使われる場面

よくある質問

ビット演算とは何ですか?
整数を2進数のビット列として扱い、各ビットにAND、OR、XOR、NOT、シフトなどの操作を行う計算です。
ビット幅とは何ですか?
値を何個のビットで表すかを示す幅です。表現できる範囲やNOT、シフトの結果を決めます。
ビット演算はどんな場面で使いますか?
複数フラグの管理、特定ビットの抽出、権限判定、色データの分解、通信データやレジスタの操作などで使います。
負の数もビット演算できますか?
できます。ただし2の補数、ビット幅、算術右シフトと論理右シフトの違いを意識する必要があります。