C言語は2つの数値の値を交換します
2つの数値a、bがありますプログラムでは、a =4,b=5 となっているので、a=5,b=4 となるように 2 つの数値の値を交換したいと考えています。
推奨コース: C 言語チュートリアル
方法 1: 一時変数を使用して保存します。これは誰でも思いつく最も簡単な方法です。
参考コード:
#include <stdio.h> int main() { int a = 4; int b = 5; int nTemp; printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); printf("\n"); nTemp = a; a = b; b = nTemp; printf("----------------------------------我是分割线------------------------------------\n"); printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); return 0; }
実行結果:
方法 2: 加算と減算を使用して交換、この方法は実際には a b の結果を変数に一時的に保存します。元の b から a を減算すると、交換された b が得られますが、この方法には欠点があり、a と b は両方とも int 型であり、a b の結果が外れる可能性があります。限界。
参照コード:
#include <stdio.h> int main() { int a = 4; int b = 5; printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); printf("\n"); a = a + b; b = a - b; a = a - b; printf("----------------------------------我是分割线------------------------------------\n"); printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); return 0; }
実行結果:
方法 3: 乗算と除算を使用して交換, この方法は方法 2 と似ていますが、a に一時的に格納される a と b の代わりに a*b が使用される点が異なります。以下の考え方は同じです。この方法には方法 2 と同じ欠点があります。境界外の問題が発生し、境界を越えやすくなります。
参照コード:
#include <stdio.h> int main() { int a = 4; int b = 5; printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); printf("\n"); a = a * b; b = a / b; a = a / b; printf("----------------------------------我是分割线------------------------------------\n"); printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); return 0; }
方法 4: XOR メソッドを使用して を交換します。このメソッドには以前の範囲外はありません。これは完璧な方法です. この方法は主に XOR 機能を利用して a^b の値を最初に a に保存します. a^b^b=a なので交換はスムーズに完了します.
参考コード:
#include <stdio.h> int main() { int a = 4; int b = 5; printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); printf("\n"); a = a ^ b; b = a ^ b; a = a ^ b; printf("----------------------------------我是分割线------------------------------------\n"); printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); return 0; }
方法 5: シフト メソッド を使用して、元の int 型 a を上位 16 ビットに分割し、下位 16 ビットをこれは、さらに 16 ビットの一時記憶領域を反転できることに相当しますが、この方法の欠点も明らかです。つまり、割り当てられた a または b が 16 ビットを超える場合、この方法ではエラーが発生します。
参照コード:
#include <stdio.h> int main() { int a = 32123; int b = 12345; printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); printf("\n"); a <<= 16; a |= b; b = a >> 16; a = a & 0xffff; printf("----------------------------------我是分割线------------------------------------\n"); printf("交换前a,b的值为:\n"); printf("a=%d\n", a); printf("b=%d\n", b); return 0; }
実行結果:
以上が2つの数値の値を交換するC言語の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。