C言語関係掲示板

過去ログ

No.489.作業用変数を使わずに変数の中身を入れ換える

[戻る] [ホームページ]
No.3593

AとBの交換について
投稿者---佐藤(2002/11/27 09:48:44)


 こんにちは
変数Aと変数Bの値を交換したいのですが、もう一つの変数を使わずにそのままAとBを交換する方法がわかりません。数字を使うらしいのですが・・・・。わかる方がいらしたら教えてください。よろしくお願いします。


No.3596

Re:AとBの交換について
投稿者---かずま(2002/11/27 16:32:43)


> 変数Aと変数Bの値を交換したいのですが、もう一つの変数を使わずにそのまま
> AとBを交換する方法がわかりません。数字を使うらしいのですが・・・・。
数字を使うというのが分かりませんが、

    int a, b, t;

とすると、a と b の値を交換する普通の方法は、

    t = a;  a = b;  b = t;

変数 t を使わない方法は、

    a ^= b;  b ^= a;  a ^= b;

または、

    a += b;  b = a - b;  a -= b;

ただし、オーバーフローを検出する処理系では、後者はだめな場合があります。

関数にすると、

void swap(int *a, int *b)
{
    if (a == b) return;
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}

if (a == b) を省略すると、swap(&x, &x); という呼び出しで悲惨な結果になります。


No.3615

Re:AとBの交換について
投稿者---佐藤(2002/11/28 09:25:39)


大変ありがとうございました。
これを基にじっくり考えて見たいと思います。