ビット演算

ビット演算子

名前結果
$a & $bビット積(論理積)$a および $b の両方にセットされているビットがセットされます。文字列の長さは短い方の長さ。
$a | $bビット和(論理和)$a または $b のどちらかにセットされているビットがセットされます。文字列の長さは長い方の長さ、不足分は最後にバイナリ0を追加して演算する。
$a ^ $bビットXOR(排他的論理和)$a または $b のどちらか一方にセットされており、両方にセットされていないビットがセットされます。
~ $aビット否定$a にセットされているビットはセットせず、そうでないものは逆にします。
$a << $b左シフト$a のビットを左に $b ビットシフトする (各シフトは “2をかける” ことを意味します)
$a >> $b右シフト$a のビットを右に $b ビットシフトします (各シフトは “2で割る” ことを意味します)

10 << 1  10 * 2の1乗 結果:20
10 << 3 10 * 2の3乗 結果:80

奇数、偶数の判定

function odd($var)
{
    // 渡された整数が奇数かどうかを返します
    return $var & 1;
}

function even($var)
{
    // 渡された整数が偶数かどうかを返します
    return !($var & 1);
}

$array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
$array2 = [6, 7, 8, 9, 10, 11, 12];

echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));

/*
Odd :
Array
(
    [a] => 1
    [c] => 3
    [e] => 5
)
Even:
Array
(
    [0] => 6
    [2] => 8
    [4] => 10
    [6] => 12
)
*/

参考記事

Math関数/BC Math関数