ビット演算子

NOT

integer a = 2 // 0000 0000 0000 0000 0000 0000 0000 0010
 
return ~a // 1111 1111 1111 1111 1111 1111 1111 1101

AND

ある定数 a に、b のビットが立っているかどうか確認する場合に用いる。

integer a = 0x12345678 // 0001 0010 0011 0100 0101 0110 0111 1000
integer b =       0x40 // 0000 0000 0000 0000 0000 0000 0100 0000
// -----------------------------------------------------------------
return a&b             // 0000 0000 0000 0000 0000 0000 0100 0000

OR

ある定数 a に、b のビットを立てたい場合に用いる。

integer a = 0x12345678 // 0001 0010 0011 0100 0101 0110 0111 1000
integer b =        0x4 // 0000 0000 0000 0000 0000 0000 0000 0100
// -----------------------------------------------------------------
a = a|b                // 0001 0010 0011 0100 0101 0110 0111 1010

XOR

ある定数 a の、b のビットだけ反転させたい場合に用いる。

integer a = 0x12345678 // 0001 0010 0011 0100 0101 0110 0111 1000
integer b =       0x40 // 0000 0000 0000 0000 0000 0000 0100 0000
// -----------------------------------------------------------------
a = a^b                // 0001 0010 0011 0100 0101 0110 0011 1000

左シフト

integer a = 2 // 0000 0000 0000 0000 0000 0000 0000 0010
 
return a<<1 // 0000 0000 0000 0000 0000 0000 0000 0100

右シフト

integer a = 2 // 0000 0000 0000 0000 0000 0000 0000 0010
 
return a>>1 // 0000 0000 0000 0000 0000 0000 0000 0001

※ 右シフトにおいては、符号ビットは保存される

integer a = 16 // 0000 0000 0000 0000 0000 0000 0001 0000
integer b = -2 // 1111 1111 1111 1111 1111 1111 1111 1110
 
return a>>1 // 0000 0000 0000 0000 0000 0000 0000 1000
return b>>1 // 1111 1111 1111 1111 1111 1111 1111 1111