3 番目の変数を使用せずに、2 つの変数の交換中に発生するオーバーフローに対処するにはどうすればよいでしょうか。XOR ソリューションは整数に対してのみ使用できると思います。他の変数タイプはどうですか?
6 に答える
4
これは答えではありませんが、コメントには合いません。
スワップ用の一時変数をさらに使用すると問題が発生するほど、利用可能なスタック ストレージの端に近い場所で実行するのは、どのような状況でしょうか?
いくつかの組み込みシナリオを見ることができましたが、これが問題になるほどスタック スペースが不足するシナリオ (アセンブリ言語でコードを記述していない場合) を想像するのは難しいです。
于 2009-04-04T22:26:47.600 に答える
2
XOR は、XOR オペレーターに処理させることができるものすべてに対して機能します。これはバイナリ データのプロパティであり、整数を表すために使用されるバイナリ データのプロパティではありません。
于 2009-04-04T22:25:54.263 に答える
2
それをまったくしないことによって。XOR スワップ アルゴリズムはクールなハックです。本番コードでは使用しないでください。
于 2009-04-04T22:53:22.887 に答える
0
XCHGの何が問題になっていますか? スタック不要、オーバーフロー(キャリーフラグ)なし? どちらかを設定してください:)。
于 2009-07-02T07:31:49.520 に答える
0
a = a + b;
b = a - b;
a = a - b;
これは、整数と浮動小数で機能します。
于 2009-07-02T07:38:51.863 に答える
0
XOR ソリューションは、整数だけでなく、ビットごとにコピーできるすべての型で機能します。ただし、変数をそれ自体で XOR しないでください。
int x = 10;
int *p1 = &x;
int *p2 = p1;
*p1 = *p1 ^ *p2;
*p2 = *p1 ^ *p2;
*p1 = *p1 ^ *p2;
/* now x == 0 :( */
于 2009-04-04T22:27:58.330 に答える