![]() |
![]() |
![]() |
スワップ |
辞書:電算用語の基礎知識 計算機OS機能編 (TCOS) |
読み:スワップ |
外語:swap |
品詞:名詞 |
交換すること。
|
概要 |
交換作業には、様々なものが想定される。
技術 |
変数の交換 |
変数(高級言語の場合)やレジスター(アセンブリ言語の場合)の中身を交換する需要は、かなり多い。
しかしながら、その機能が言語仕様に無いことも多い。例えば、代表的なプログラミング言語であるCなどには存在しない。そこで、様々な方法が編み出された。
変数aとbを交換したい場合、最も基本的な処理は次の通りである。
int a, b, x;
x = a;
a = b;
b = x;
途中に一つ変数xを介することによって、交換を実現する。
しかし、アレゲなCプログラマーは、このような生ぬるい方法は使わない。なぜなら、それは何かに負けているからである(意味不明)。
変数二つで交換を実現する方法として代表的なのが、次の方法である。
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 )
アセンブリ言語の場合でも、マクロアセンブラーを使用しているなら、マクロを定義しておくだけで簡単に、実現可能なはずである。
足し算と引き算を使う方法もある。
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が簡単には実現できない。
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |
![]() |