8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「ビット演算・ビットベクトルとは」を理解する

Last updated at Posted at 2016-04-09

ビット演算とは

ビット演算 wikipediaより

ビット演算(ビットえんざん)とは、ひとつあるいはふたつのビットパターンまたは二進数を個々のビットの列として操作することである。

数値を2進数の形式で表示し、各ビットにたいして演算を行う。

演算子 AND(&)

左辺と右辺の同じ位置のビットを比較して、共に「1」の箇所のみ位置にする。

.java
)
22 & 14
===> 6

これは、22が10110で、14が1110で共に位置の箇所を取ると、110すなわち6となる。

演算子 OR(|)

ANDのORバージョン。そのままの意味である。

シフト演算子 << >>

シフト演算子がわかりやすいです。

x << y は xのビットをyビットだけ左にシフトさせ、右端には0を埋める。
x >> y は xのビットをyビットだけ右にシフトさせ、左端にはその時の最上位と同じ符号を埋める。
x >>> y は xのビットをyビットだけ右にシフトさせ、左端には0を埋める。

最上位の桁とは、+/-を決めている桁。

.java
)

1 << 4 // => 2進数で10000なので、16を返す
3 << 5 // => 2進数で1100000なので、96を返す

8 >> 2 // => 2進数で10なので、2を返す。

<<は左オペランドのビットを右オペランドのビット分だけ、左にシフトさせます。左へのシフトは元の値に2をシフト分累乗した値を乗算することを意味します。

>>は左オペランドのビットを右オペランドのビット分だけ、右にシフトさせます。右へのシフトは元の値に2をシフト分累乗した値を除算することを意味します。左端には最上位のビットと同じ符号が入ります。

>>>は左オペランドのビットを右オペランドのビット分だけ、右にシフトさせます。左端には0が入ります。左端に0が入ると言うことは >>>は演算結果に正負の区別を持たないとも言えます。>>>演算子は符号の区別を持たない演算処理に使用します。

ビットベクトルとは

[1,0,0,0,0,1]

のように0,1のみを値として持つベクトルのことである。

4バイトの領域があれば、32個の0と1の並びを表現できる。

例えば、Javaにおけるintタイプは 4 bytes(32 bits) である。つまり、int 型の変数一つで32個の0と1の並びを表現することができる。

ビットを立てる

.java
int position = 5 // 0101 の1の箇所を指す
int foo = 0;
foo = foo | 1 << position // posの場所のbitを1に立てる
foo |= 1 << position

ともかける。


参考

Javaのそれぞれの数字型のbit数に関して

Section 4.2: Primitive Types and Valuesより

The integral types are byte, short, int, and long, whose values are 8-bit, 16-bit, 32-bit and 64-bit signed two's-complement integers, respectively, and char, whose values are 16-bit unsigned integers representing UTF-16 code units (§3.1).

8
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?