ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
交換すること。
交換作業には、様々なものが想定される。
変数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 )
コメントなどを投稿するフォームは、日本語対応時のみ表示されます