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 & 1U) { /* xの最下位ビットが1のとき */ } else { /* xの最下位ビットが0のとき */ }
参考
この記事を読んだ人はこんな記事も読んでいます。
C言語 – 基本的なビット演算と定数の修飾