通信用語の基礎知識 全国のICカードこれひとつ 戻る

通常PC用 / 人気 更新 今日 カテ
電子計算機 > ソフト > 処理方法 > メモリー > 仮想記憶
技術・工学 > 半導体 > 集積回路 > MPU > 動作・機能・技術
スワップ
辞書:電算用語の基礎知識 計算機OS機能編 (TCOS)
読み:スワップ
外語: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が簡単には実現できない。

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

[再検索] [戻る]


通信用語の基礎知識検索システム WDIC Explorer Ver 7.04 (07-Mar-2021)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club
KisoDic