B170 ビット演算子

ビット(bit)とは、コンピュータが処理する最小の単位です。ビットは 0 と 1 に対応しており、2進数 で表現をします。その、2進数表現時の桁数のことをビットといいます。今回はそのビットを用いた演算子の紹介をします。

ビット演算子について

演算子演算子名
&論理積
|論理和
^排他論理和
~否定
<<左シフト
>>右シフト

|(論理和)

PHP
$number1 | $number2

$number1→110(十進数では6)
$number2→101(十進数では5)

PHP
$number1 = 6;
$number2 = 5;
 
echo decbin($number1 | $number2);

論理和では0と0の場合は0でそれ以外は1となります。

出力結果

PHP
100

&(論理積)

PHP
$number1 & $number2

$number1→110(十進数では6)
$number2→101(十進数では5)

PHP
$number1 = 6;
$number2 = 5;
 
echo decbin($number1 & $number2);

論理積では1と1の場合は1でそれ以外は0となります。

出力結果

PHP
100

^(排他的論理和)

PHP
$number1 ^ $number2

$number1→110(十進数では6)
$number2→101(十進数では5)

PHP
$number1 = 6;
$number2 = 5;
 
echo decbin($number1 ^ $number2);

排他論理和では両方同じ場合は0、それ以外は1となります。

出力結果

PHP
100

~(否定)

PHP
~$number1

$number1→110(十進数では6)

PHP
$number1 = 6;
 
echo decbin(~$number1);

否定では全ての値が反転となります。
(補足:使用しているCPU(32bit / 64bit)によって反転する範囲が変わるケースがある為、利用する際は留意する事)

出力結果

PHP
11111111111111111111111111111001

<<(左シフト)

PHP
$number1 << 1

$number1→110(十進数では6)

PHP
$number1 = 6;
 
echo decbin($number1 << 1);

左シフトでは指定された桁分、左に値をずらし、空いた桁には0を入れます。

出力結果

PHP
1100

>>(右シフト)

PHP
$test1 >> 2

$number1→110(十進数では6)

PHP
$number1 = 6;
 
echo decbin($number1 >> 2);

出力結果

PHP
1

エンジニアからのアドバイス

ビット演算子はプログラムを書く時に頻繁に必要にはなりませんが、知識として覚えておくといざ必要な際に調べやすいかと思います。

---