menu
ホーム > PHPの文法 > 4 演算子 > PHP の ビット演算子
UPDATE:2017年03月22日

PHP の ビット演算子

PHPリファレンス

1 Minute Note

& ビットAND(論理積) | ビットOR(論理和)
^ ビットXOR(排他論理和) ~ ビット否定
<< 左シフト >> 右シフト
  • ビット演算子 は、整数値をビット値で演算
  • ビット は、コンピュータが処理する最小単位
  • ビット は、2進数の 0 と 1 に対応している


ビット演算子とは

POINT

  • ビット演算子 は、整数値をビット値で演算
  • ビット は、コンピュータが処理する最小単位
  • ビット は、2進数の 0 と 1 に対応している

ビットとは、コンピュータが処理する最小の単位です。ビット演算子は、オペランド(演算の対象となる値や変数のこと)の整数値をビット(2進数)に表現し、特定のビットを評価し演算を行います。つまり、整数値をビット値で演算します。

上記でも説明しましたが、ビットはコンピュータが処理する最小の単位です。ビットは2進数の 0 と 1 に対応しています。コンピュータでは通常、8ビット(1バイト)を1つの単位として扱い、1バイトは、0 から2進数の11111111(10進数の255)までが表現可能です。

進数を変換する関数

  • bindec() 2進数を10進数に変換する
  • decbin() 10進数を2進数に変換する

ビットAND(論理積)演算子を使用した簡単な例で考えて見ましょう。

結果は

3

となります。

ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
3(10進法) は 000011ビット(2進法)
35(10進法) は 100011ビット(2進法)

2進法のそれぞれ対応するビットを比較します。
ビットAND(論理積)の場合、両方とも1の場合は1になります。そうでない場合は0になります。

000011
100011
————-
000011

000011(2進法)は3(10進法) となります。
ですので、結果は 3 となります。


ビット演算子の種類

ビット演算子の種類、優先順位、結合時の評価です。すべての演算子の種類や優先順位はこちらを参照下さい。

演算子 名前 優先順位 結合時の評価 結果
& ビットAND(論理積) 3 left $a & $b $a および $b の両方にセットされているビットがセットされます
| ビットOR(論理和) 1 left $a | $b $a または $b のどちらかにセットされているビットがセットされます
^ ビットXOR(排他論理和) 2 left $a ^ $b $a または $b のどちらか一方にセットされており、両方にセットされていないビットがセットされます
~ ビット否定 5 right ~ $a $a にセットされているビットはセットせず、そうでないものは逆にします
<< 左シフト 4 left $a << $b $a のビットを左に $b ビットシフトする (各シフトは "2をかける" ことを意味します)
>> 右シフト 4 left $a >> $b $a のビットを右に $b ビットシフトします (各シフトは "2で割る" ことを意味します)


計算の例


ビットAND(論理積)

結果は

3

となります。

ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
3(10進法) は 000011ビット(2進法)
35(10進法) は 100011ビット(2進法)

2進法のそれぞれ対応するビットを比較します。
ビットAND(論理積)の場合、両方とも1の場合は1になります。そうでない場合は0になります。

000011
100011
————-
000011

000011(2進法)は3(10進法) です。


ビットOR(論理和)

結果は

35

となります。

ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
3(10進法) は 000011ビット(2進法)
35(10進法) は 100011ビット(2進法)

2進法のそれぞれ対応するビットを比較します。
ビットOR(論理和)の場合、両方とも0の場合は0になります。そうでない場合は1になります。

000011
100011
————-
100011

100011(2進法)は35(10進法) です。


ビットXOR(排他論理和)

結果は

32

となります。

ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。
3(10進法) は 000011ビット(2進法)
35(10進法) は 100011ビット(2進法)

2進法のそれぞれ対応するビットを比較します。
ビットXOR(排他論理和)の場合、両方等しい場合は0になります。片方が0で片方が1の場合は1となります。

000011
100011
————-
100000

100000(2進法)は32(10進法) です。


ビット否定

結果は

0000000000000000000000000000000000000000000000000000000000001100
1111111111111111111111111111111111111111111111111111111111110011

となります。

ビット演算子は10進法の整数値をコンピュータで処理するビット(2進法)で処理します。

ビット否定演算子はビットを反転させます。1を0に0を1に変換します。


左シフト

結果は

11110

となります。

左シフトの場合、左オペランドを2進法に変換し、右オペランドで指定したビット数分、左にシフトします。シフトした分を0で埋めます。両方のオペランドは演算前に整数に変換されます。


右シフト

結果は

111

となります。

右シフトの場合、左オペランドを2進法に変換し、右オペランドで指定したビット数分右にシフトします。シフトした分を0で埋めます。両方のオペランドは演算前に整数に変換されます。


サンプルコード

– サンプル Click Here ! –

実行結果
ビットAND(論理積)
3

ビットOR(論理和)
35

ビットXOR(排他論理和)
32

ビット否定
0000000000000000000000000000000000000000000000000000000000001100
1111111111111111111111111111111111111111111111111111111111110011

左シフト
11110

右シフト
111

bindec() 2進数を10進数に変換する
35

decbin() 10進数を2進数に変換する
100011

– サンプル Click Here ! –


タグ(=記事関連ワード)

日付

公開日:2017年3月21日
最終更新日:2017年03月22日

関連記事

配列関数サンプル

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

http://wepicks.net/phpref-operators_bitwise/trackback/

page top