ソロモン・W・ゴロム作とされる。中間変数を使用せずに 2 つの整数変数の値を交換する方法 (これは、変数が高価だった昔からのものであることがわかります)。 PHP の構文のおかげで、これもワンライナーです。
$a^=$b^=$a^=$b;
さて、これがその流れです(そう、ちょっと増やすためにコンテンツのない投稿をする必要があるような…)。
まず、線を単純化します。 ^= は右結合であること、つまりその行では右端の演算子が最初に評価されること、代入演算子も左辺値に代入した値を返すこと、および foo^=bar は foo=foo^ の短縮形であることに注意してください。バー:
コード:
<br>$a^=$b^=$a^=$b;<br>$a^=($b^=($a^=$b));<br>$a=$a^b;<br>$a^=($b^=$a);<br>$a=$a^$b;<br>$b=$b^$a;<br>$a=$a^$b;<br>
^ の動作を思い出してください。引数 (引数の内部バイナリ表現) から対応するビットの各ペアを取得し、それらを XOR して、結果の対応するビットを生成します (「対応する」とは、両方の引数の最初のビットが最初のビットを生成することを意味します)両方の引数の 2 番目のビットが結果の 2 番目のビットを生成する、というように続きます。これが、BuzzLY が指摘したように、両方の変数が同じサイズであることが重要である理由です。そのうちの 1 つは、もう 1 つより先に XOR するためのビットが不足しています。 したがって、^ が変数のペアに対して何を行うかを理解するには、単一のビットに対して何を行うかを要約するだけで済みます
。
http://www.bkjia.com/PHPjc/445164.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/445164.html技術記事ソロモン・W・ゴロム作とされる。中間変数を使用せずに 2 つの整数変数の値を交換する方法 (これは古代の時代から遡ることができます...
)