IT系の作業が多く、趣味は音楽関係のMです。
ご存知の通り(?)、コンピューターの世界は0と1の世界です。
電気信号のONとOFFで成り立っている明快な世界です。
つまり全てのデジタル・データは0と1で表現できるのです。
今日は、そのデジタル・データAとBがあったとして、それを入れ替えるロジックを考えてみましょう。
そもそも、デジタルなデータを入れ替える・・・なんて仮想的過ぎてイメージが沸かないかも知れないので、
もう少し具体的に言うと、コンピューターのメモリーの、とある位置にAという存在があって、
また別のメモリーにBという存在があって、両者の中身を入れ替える、という事になります。
今回、紹介するロジックを知らない、大抵のプログラマーさんは、入れ替えの手順として「退避エリア」を用いるでしょう。
移動先のデータを上書きで消してしまわないように、一時的な領域として退避エリアを使用するのです。
しかし、もし、AやBが非常にサイズが大きく、メモリーの領域をとても多く消費しているとしたら、
退避エリアもそれに伴って大きくなりますね。単純に処理するためにはAやBと同じサイズの退避エリアを用意するでしょうから…。
使用しているコンピューターによっては、この退避エリアのメモリー・サイズが命取りになって、
プログラムが動かない、非常に処理スピードが落ちてしまう、なんて事にもなりかねないのです。
ここで、少し考えれば退避エリアを小さくしてAの一部だけを削り取って退避させ、削った分だけBをAに移動させて…
という方法も考えられます。ちょっと手順は増えるのですが、賢い方法です。
でも、そんな方法を取らなくても、退避エリアを全く使わずに実現してしまう方法があるのです!!!
それがXORという排他的論理和を用いたプログラミング・ロジックです。
XORとは、左から、A、B、計算結果、とすると、
0 と 0 なら 0
0 と 1 なら 1
1 と 0 なら 1
1 と 1 なら 0
という計算ができる仕組みです。
式で書くとしたら、
A XOR B = 答
という事になるのですが、
AとBの値が、どんな内容だったとしても、
A XOR B = A
B XOR A = B
A XOR B = A
という風に3回、XOR計算を繰り返すことによって、退避エリアとして余計なメモリーを使わずに、
AとBの内容は入れ替わるのです。
不思議で面白いですよね。
そして、これを知っているとプログラミングでメモリーの節約ができるのです。
【M】