1. TOPTOP
  2. Webサービス
  3. PHP

PHPの排他的論理和について キャレット(^)は累乗ではありません

|

ecoteki-image

いまどきのアルゴリズムを使いこなす PHPプログラミング開発テクニック(新しいタブで開く) という本の「最強のアルゴリズム-ワンタイムパッド」(P.121)という箇所の記述を写経していると、何気に

$cx = $c^$pad[$i];

という箇所に出くわします(なお詳しいコードはこちら(新しいタブで開く)を参照してください)。

キャレット(^)は排他的論理和という意味です

$cxに代入している式の一部である$cは文字列であるはずなのに、なんで累乗の記号が出てくるのだろうか?訝しく思って調べたら、やはり累乗という意味ではありませんでした。

PHPにおけるキャレット(^)とは、論理演算子の一種で排他的論理和のことを指します。自分が説明するより、PHPの公式ドキュメントWikipedia(新しいタブで開く)を引用した方が分かりやすいですね。

PHP: 論理演算子 – Manual

$a xor $b 排他的論理和 $a または $b のどちらかが TRUE でかつ両方とも TRUE でない場合に TRUE

だそうです。なおキャレット(^)ではなくxorと表記されていますがキャレットと同義です。(新しいタブで開く)

排他的論理和 – Wikipedia

「私の身長は160cm以上である」と「私の体重は52kg未満である」の二つの命題の排他的論理和は、これらのうち一方のみが成り立つことであるから、「私は身長160cm以上であり体重が52kg以上である。あるいは、私は身長160cm未満であり体重が52kg未満である。」となる。

Wikiの方は具体例を引用しました。さらにスクリーンショットを貼らせていただきます。排他的論理和のイメージはこんな感じです。

最近、人様にプログラミングの基礎的なこと教える機会が多くなってきました。コードを読むときに少しでも「何これ?」と疑問に感じたことは、掘り下げて調べなければなりませんね。その姿勢を示すことが、プログラミング学習における最も大切な指導だと思う今日この頃です。

【参考サイト】