C言語 プログラミング

C言語で用いる基本的なビット演算子を書き留める。

ビット単位の論理演算

AND演算子 a & b aとbのビット単位の論理積
OR演算子 a | b aとbのビット単位の論理和
XOR演算子 a ^ b aとbのビット単位の排他的論理和
NOT演算子 ~a aのビット単位の否定(1の補数)
<<演算子 a << b aをbビット左にシフト(空いたビットは0)
>>演算子 a >> b aをbビット右にシフト(空いたビットは0)

論理シフトと算術シフト

論理シフトは符号ビットを特別に考慮することなく空きビットを0で埋める。負の値を右シフトすると符号ビットも消えて0になる。主に符号なしの2進数を扱うのに適している。

算術シフトは右シフトの場合は最上位ビット以外のビットをシフトし、シフト前の符号ビットで空いたビットを埋める。左シフトでは論理シフト同様に空いたビット列を0で埋める。主に2の補数表現の符号付き2進数を扱うのに適している。

定数の修飾

unsigned型 100U unsigned 型定数
long(int)型 100L long型 定数
float型 100F float型 定数

末尾にUを付けることでunsigned型定数に、末尾にLを付けることでlong(int)型、末尾にFを付けることでfloat型として扱うことができる。

ビット操作の場合にはしばしばunsigned型を意味するUを用いる。

int num;

if (num &amp; 1U) {
  /* xの最下位ビットが1のとき */
} else {
  /* xの最下位ビットが0のとき */
}

参考

ビット演算 – Wikipedia

C言語 – 基本的なビット演算と定数の修飾
Tagged on:

コメントを残す