ビット演算子は、整数における特定のビットをオンまたはオフにすることを 可能にします。もし左辺値と右辺値共に文字列であった場合にはビット演算子は 文字の ASCII 値に対して作用します。
<?php
echo 12 ^ 9; // '5'を出力します
echo "12" ^ "9"; // バックスペース文字を出力します(ascii 8)
// ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8
echo "hallo" ^ "hello"; // ascii値の #0 #4 #0 #0 #0 を出力します
// 'a' ^ 'e' = #4
echo 2 ^ "3"; // 1 を出力します
// 2 ^ ((int)"3") == 1
echo "2" ^ 3; // 1 を出力します
// ((int)"2") ^ 3 == 1
?>
例 | 名前 | 結果 |
---|---|---|
$a & $b | ビット積 | $a および $b の両方にセットされているビット |
$a | $b | ビット和 | $a または $b のどちらかにセットされているビット |
$a ^ $b | 排他的論理和 | $a または $b にセットされており、両方にセットされていないビット |
~ $a | 否定 | $a にセットされているビットはセットせず、そうでないものは逆にする |
$a << $b | 左シフト | $a のビットを左に $b ビットシフトする(各シフトは "2をかける" ことを意味します) |
$a >> $b | 右シフト | $a のビットを右に $b ビットシフトします (各シフトは "2で割る" ことを意味します) |
32 ビットシステムでは 32 ビット以上の右シフトは行わないでください。 また、結果が 32 ビットを超えてしまうような左シフトも行わないでください。