スワップ

読み:スワップ
外語:swap 英語
品詞:名詞

交換すること。

目次

交換作業には、様々なものが想定される。

変数の交換

需要

変数(高級言語の場合)やレジスター(アセンブリ言語の場合)の中身を交換する需要は、かなり多い。

しかしながら、その機能が言語仕様に無いことも多い。例えば、代表的なプログラミング言語であるCなどには存在しない。そこで、様々な方法が編み出された。

基本

変数aとbを交換したい場合、最も基本的な処理は次の通りである。

int a, b, x;

x = a;

a = b;

b = x;

途中に一つ変数xを介することによって、交換を実現する。

しかし、アレゲなCプログラマーは、このような生ぬるい方法は使わない。なぜなら、それは何かに負けているからである(意味不明)。

魔法その1

変数二つで交換を実現する方法として代表的なのが、次の方法である。

int a, b;

a ^= b;

b ^= a;

a ^= b;

整数型の変数に限られるが、排他的論理和(XOR)を三回行なうと、不思議と変数の中身は入れ替わっている。

これを手っ取り早くするためには、次のマクロを定義しておくと簡便である。

#define SWAP(x,y) { x^=y; y^=x; x^=y; }

波括弧の代わりに丸括弧を使っても良い。

#define SWAP(x,y) ( x^=y, y^=x, x^=y )

アセンブリ言語の場合でも、マクロアセンブラーを使用しているなら、マクロを定義しておくだけで簡単に、実現可能なはずである。

魔法その2

足し算と引き算を使う方法もある。

int x, y;

x += y

y = x - y

x -= y

こちらは、どのように値が変化して行くかを冷静に考えると、交換される理由が分かるだろう。

これを手っ取り早くするためには、次のマクロを定義しておくと簡便である。

#define SWAP(x,y) { x += y; y = x - y; x -= y; }

波括弧の代わりに丸括弧を使っても良い。

#define SWAP(x,y) ( x += y, y = x - y, x -= y )

アセンブリ言語の場合でも上と同様だが、3オペランド命令がないCPUの場合、途中のy=x-yが簡単には実現できない。

用語の所属
仮想記憶
関連する用語
ハードディスクドライブ
スワップファイル

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club