Solaris 動的トレースガイド

ビット演算子

D では、次の二項演算子を使って、整数オペランドに含まれる個々のビットを操作できます。これらの演算子の効果は、ANSI-C の場合と同じです。

表 2–9 D のビット演算子

&

ビット単位の論理積 AND 

|

ビット単位の論理和 OR 

^

ビット単位の排他的論理和 XOR 

<<

左のオペランドを、右のオペランドに指定されたビット数だけ左にシフトする 

>>

左のオペランドを、右のオペランドに指定されたビット数だけ右にシフトする 

二項演算子 & では、整数オペランドのビットを消去できます。二項演算子 | では、整数オペランドにビットを設定できます。二項演算子 ^ は、対応するオペランドビットが 1 つだけ設定されたビット位置に 1 を返します。

シフト演算子では、指定された整数オペランド内のビットを左右に移動できます。左シフトでは、結果の右側の空のビット位置にゼロが格納されます。符号なし整数オペランドを使った右シフトでは、結果の左側の空のビット位置にゼロが格納されます。符号付き整数オペランドを使った右シフトでは、左側の空のビット位置に符号ビットの値が格納されます。この操作を「算術シフト演算」と呼びます。

ビット数が負の値である場合や、左側のオペランドのビット数より大きい場合、整数値シフトの結果は未定義です。D プログラムのコンパイル時にこの条件が検出されると、D コンパイラからエラーメッセージが表示されます。

二項論理演算子のほかに、単項演算子 ~ も使用できます。この単項演算子は、単一のオペランドのビット単位の否定を実行します。 つまり、オペランド内の 0 ビットは 1 ビット、1 ビットは 0 ビットに変換されます。