ビット演算
出典: YKAwiki
目次 |
[編集]
概要
数値を2進数で表現した物をビット列と言います。 ビット列は以下に示すビット演算によって操作することが出来ます。
使う場面は少ないですが、C/C++使い・画像処理使いなら知っておいて損はないはず。
[編集]
操作方法
[編集]
値のセット
ビット列といっても実体は単なる数値です。 そのまま
int a = 3;
とか入れれば
0000 0011
がaに入ったことになります。ちなみにC/C++では2進数を直接表記する方法はありません。
16進数を使うと4ビットごとに2進数を分割できるのでわかりやすいです。
int 0xfe;
これは
1111 1110
に対応します。簡単だね!
[編集]
範囲操作
以下の演算子があります。
- "&" AND
- "|" OR
- "^" XOR ビットの値が異なる場合のみ1。
- "~" NOT これだけ単項演算子。"~a"としたときaのビットパターンを反転します。
[編集]
&
右側の数値で1と指定されている部分のみが残ります。
int a = 0xfe; // 1111 1110 int b = 0x0f; // 0000 1111 int c = a & b;// 0000 1110
[編集]
|
どちらかの数値が1であれば全て1にセットします
int a = 0xaa; // 1010 1010 int b = 0xf0; // 1111 0000 int c = a | b;// 1111 1010
[編集]
^
玄人好みのXOR
int a = 0xaa; // 1010 1010 int b = 0xec; // 1110 1100 int c = a ^ b;// 0100 0110
[編集]
指定ビット操作
特定の1ビットだけを操作します
[編集]
0を1にする
"|"を使えば終了
//5ビット目を1にしたい int a = 0x8a; // 1000 1010 int b = 0x10; // 0001 0000 int c = a | b;// 1001 1010
[編集]
1を0にする
考え方としてはそのビット以外が1となるパターンを用意してフィルタリングすればOK。
//たとえば、5ビット目だけを0にしたいとき int a = 0xba; // 1011 1010 int b = 0x10; // 0001 0000 int c = ~b; // 1110 1111 int d = a & b:// 1010 1010
いわゆるマスク操作みたいな感じ
