ビット演算・ビットシフト計算機 / ツール

ビット演算(AND、OR、XOR)とビットシフトを32bit符号なしで計算します。

ビット演算2進数16進数10進数8進数
値1
値2
AND0000
OR 0000
XOR0000
ビットシフト2進数16進数10進数8進数
左シフト0000
右シフト0000
シフトするビット数:

ビット演算(AND, OR, XOR)

二つのビット列を入力とし、同じ位置のビットごとに論理演算を行います。

AND(論理積)

二つのビットがどちらも1なら1、どちらかでも0なら0を返します。

    1010
AND 1100
  = 1000

多くのプログラミング言語では&を演算子に用います。

and = x & y;

OR(論理和)

二つのビットがどちらかでも1なら1、どちらも0なら0を返します。

   1010
OR 1100
 = 1110

多くのプログラミング言語では|を演算子に用います。

or = x | y;

XOR(排他的論理和)

二つのビットが違う値なら1、同じ値なら0を返します(片方だけ1なら1、どちらも0またはどちらも1なら0)。

    1010
XOR 1100
  = 0110

多くのプログラミング言語では^を演算子に用います。

xor = x ^ y;

ビットシフト(シフト演算)

ビット列の各桁を右か左に移動させます。

ビットシフトもビット列に対する操作であるため、広義にはビット演算の一種とみなされます。しかしビットごとの操作ではなく数値全体に対するものであるため、ビット演算とは区別する場合もあります。

左シフト

右端の空くビット位置には0が入り、あふれた左端のビットは消えます。下記は4ビットレジスタの場合の例です。

  1111 LEFT-SHIFT 1
= 1110

多くのプログラミング言語では<<を演算子に用います。

leftShift = x << 1;

右シフト

算術シフト(符号あり)と論理シフト(符号なし)があります。本ツールは後者の論理シフトのみ対応しています。どちらもあふれた右端のビットは消えますが、左端の空くビット位置の埋め方が異なります。

算術シフトは符号を保持するため、左端の空くビット位置には最上位ビット(符号ビット)と同じ値が入ります。下記は4ビットレジスタの場合の例です。

  1011 RIGHT-SHIFT 1
= 1101

  0011 RIGHT-SHIFT 1
= 0001

論理シフトは単純にすべてのビットをシフトするので、左端の空くビット位置には0が入ります。下記は4ビットレジスタの場合の例です。

  1011 RIGHT-SHIFT 1
= 0101

多くのプログラミング言語では>>または>>>を演算子に用います。下記はJavascriptの場合の例です。

rightShift = x >> 1;  // 算術シフト
rightShift = x >>> 1; // 論理シフト
矢野ヒロタ / 1987年生まれ。プログラマー。
趣味で作ったWebツールを公開しています。無料ですのでご自由にお使いください。ブログは技術ネタと見せかけてもっぱら妄想です。よしなに。
© HIROTA YANO