ビット演算子

単一の整数値、または2つの整数値同士は、ビット演算子を使ってビット演算が可能である・・・。

まずは、入力されたa, bの値を2進数のビット列で出力する・・・。
2で割った余りを下の桁から文字配列に入れていく感じ・・・。
(今回はintのa, bを8桁2進数で表すようにしてしまったが、本来はunsigned intを32桁2進数で表すべきだった・・・。反省・・・。)

$ gcc bit_operator.c -o bit_operator
$ ./bit_operator
a: 3
b: 23
a(2) = 00000011
b(2) = 00010111

a( = 3)とb( = 23)を2進数で表すとこうなる・・・。

aとbのビット演算ORは、

a | b

と書く・・・。

aとbのビット演算ORの結果をxに代入し、2進数で表すと、

$ ./bit_operator
a: 7
b: 32
a(2) = 00000111
b(2) = 00100000
x(2) = 00100111

7と32ならこうなる・・・。
aとbのどちらかでビットが立っていれば、xにもビットが立つ・・・。

aとbのビット演算ANDは、

a & b

と書く・・・。

aとbのビット演算ANDの結果をyに代入し、2進数で表すと、

a: 7
b: 34
a(2) = 00000111
b(2) = 00100010

.
.
.

y(2) = 00000010

7と34ならこうなる・・・。

aとbの両方でビットが立っていれば、yにもビットが立つ・・・。

xのビット演算NOTは、

~x

と書く・・・。

xのビット演算NOTの結果はunsigned int型nxに代入し、2進数で出力する・・・。
(NOTの場合は数字が大きくなり、ビット列における1が多くなるので、unsigned intにして表示する文字配列も32文字に対応している・・・。)

xが23(00010111)の場合、

x(2) = 00010111

.
.
.

nx(2) = 11111111111111111111111111101000

0と1が反転している・・・。

aとbのビット演算XORは、

a ^ b

と書く・・・。

a( = 3)とb( = 23)のビット演算XORの結果をxabに代入し、2進数で表すと、

a(2) = 00000011
b(2) = 00010111

.
.
.

xab(2) = 00010100

こうなる・・・。

xのビット演算RSHIFT(右シフト)は、

x >> <シフト数>

と書く・・・。

今回はxを2つ右シフトする・・・。

xの2つ右シフトした結果を、rxに代入し、2進数で表すと、

x(2) = 00010111

.
.
.

rx(2) = 00000101

こうなる・・・。

xのビット演算LSHIFT(左シフト)は、

x << <シフト数>

と書く・・・。

xを2つ左シフトの場合は、

xの2つ左シフトした結果を、lxに代入し、2進数で表すと、

x(2) = 00010111

.
.
.

lx(2) = 01011100

こうなる・・・。

Sample/bit_operator.c at master · bg1bgst333/Sample · GitHub