基本 フラグとして使ったりするときに必須なやつ。 &で論理積 |で論理和 ^で排他的論理和 ~でビット反転 a|=bでフラグを立てる。 a&=~bでフラグを折る。 a^=bでフラグを反転。 シフト <<で左シフト。0で埋められる。 >>で右シフト。算術シフトか論理シフトかは決まってないらしい。 算術シフト:最上位ビットはシフト前のが継承されるので、負数も2でわった感じになる。 論理シフト:最上位ビットは0になる。 ちなみに手元のLinux(GCC4.3.4,x86)で試したら、signedは算術、unsignedは論理だった。まあさすがにunsignedが論理シフトは仮定していいと思うんだけどどうなんだろう。 ちなみに有名な話だが、シフトの性質上、算術右シフトは端数を負の無限大方向に切り捨てる。除算だと0方向に切り捨てる場合が結構あって、実際C99ではそういう仕様っぽいので、そこを区別する