読者です 読者をやめる 読者になる 読者になる

GR

ゲーム好き。スマホゲームはユーザーとして遊びつつ運営する側のこととか考えてます。

値のスワップ

php
#tempを使用する基本的な置換
function swap(&$a, &$b)
{
  if($a != $b) {
    $temp = $a;
    $a = $b;
    $b = $temp;
  }
}
#整数ならこれでもOK
function swap(&$a, &$b)
{
  if($a != $b) {
    $a = $a + $b;
    $b = $a - $b;
    $a = $a - $b;
  }
}

上記の加減で行うと算術オーバーフロー例外を起こす可能性がある様子

それを回避する為に XOR交換 で実装してみたが…

# XOR交換 を試してみたがうまくいかない
function swap(&$a, &$b)
{
  if($a != $b) {
    $a = $a xor $b;
    $b = $a xor $b;
    $a = $a xor $b;
  }
}

やりかたがそもそも間違っていた

# ビット演算は^を使う
function swap3(&$a, &$b)
{
  if($a != $b) {
    $a = $a ^ $b;
    $b = $a ^ $b;
    $a = $a ^ $b;
  }
}

★参考リンク XOR交換アルゴリズム - Wikipedia PHP: 論理演算子 - Manual PHP: ビット演算子 - Manual