3 番目の変数を使用せずに 2 つの変数の値を交換する 4 つの方法
int a,b; a=10; b=15;int t; t=a; a=b; b=t;
このアルゴリズムは理解しやすく、初心者がコンピュータ プログラムの特性を理解するのに特に適しています。代入ステートメントの古典的な応用です。実際のソフトウェア開発では、このアルゴリズムは単純明快で曖昧さがなく、プログラマ間のコミュニケーションが容易であり、変数値の交換の問題が発生した場合には、通常、このアルゴリズム (以下、標準アルゴリズムと呼びます) を使用する必要があります。
上記のアルゴリズムの最大の欠点は、一時変数の使用が必要なことです。それでは、一時変数の助けを借りずに交換を実現できるのでしょうか?答えは「はい」です!ここでは、1) 算術演算、2) ポインター アドレス演算、4) スタック実装の 3 つのアルゴリズムを使用できます。
1)四則演算
int a,b; a=10;b=12; a=b-a; //a=2;b=12b=b-a; //a=2;b=10a=b+a; //a=10;b=10
原理は、aとbを数値軸上の点として扱い、2点間の距離を中心に計算します。
標準アルゴリズムと比較して、このアルゴリズムには計算プロセスが 3 つ増えていますが、一時変数は使用されません。 (以下、算術アルゴリズムと呼びます)
2) ポインタアドレス演算
アドレスの演算は実際には整数演算を実行するため、たとえば: 2 つのアドレスが減算されて、メモリ内の 2 つの変数の格納位置が何バイト離れているかを示す整数が追加されます。つまり、「a+10」は、a をベース アドレスとして、a の後の 10 クラス a データ単位のアドレスを表します。したがって、理論的には、アドレスの交換は算術アルゴリズムと同様の操作で完了し、変数を交換する目的を達成できます。つまり、
int *a,*b; //假设*a=new int(10);*b=new int(20); //&a=0x00001000h,&b=0x00001200ha=(int*)(b-a); //&a=0x00000200h,&b=0x00001200hb=(int*)(b-a); //&a=0x00000200h,&b=0x00001000ha=(int*)(b+int(a)); //&a=0x00001200h,&b=0x00001000h
上記の操作により、実際に a と b のアドレスが交換され、a は元々 b が指した値を指し、b は元々 a が指した値を指すのでしょうか?上記のコードはコンパイルできますが、実行結果は驚くべきものです。なぜ?
if(a<b) { a=(int*)(b-a); b=(int*)(b-(int(a)&0x0000ffff)); a=(int*)(b+(int(a)&0x0000ffff)); }else{ b=(int*)(a-b); a=(int*)(a-(int(b)&0x0000ffff)); b=(int*)(a+(int(b)&0x0000ffff)); }
アルゴリズムの最大の改良点は、アドレスの上位 16 ビットがセグメント アドレスであり、アドレスの上位 16 ビットがセグメント アドレスであり、アドレスの上位 16 ビットがセグメント アドレスであり、アドレスの上位 16 ビットがセグメント アドレスであり、アドレスの上位 16 ビットがセグメント アドレスであり、最後の 16 ビットであるため、ビット演算で AND 演算「int(a)&0x0000ffff」を使用することです。 16 ビットはディスプレースメント アドレスです。0x0000ffff との AND 演算の後、セグメント アドレスはマスクされ、ディスプレースメント アドレスのみが保持されます。これは元のアルゴリズムと一致し、正しい結果が得られます。
このアルゴリズムも、算術アルゴリズムと比較すると、3番目の変数を使用せずに値の交換を完了しますが、大きなデータ型を交換する場合、その実行速度が算術アルゴリズムよりも速いという利点があります。アドレスは交換しますが、変数値はメモリ内に移動されていないためです。 (以下、アドレスアルゴリズムと呼びます)3) ビット演算
int a=10,b=12; //a=1010^b=1100;a=a^b; //a=0110^b=1100;b=a^b; //a=0110^b=1010;a=a^b; //a=1100=12;b=1010;
このアルゴリズムの実装は、XOR 演算を通じてデータ内の一部のビットを反転することができます。他のビットは変更されません。これは、任意の数値と任意の値が連続 2 回 XOR 演算され、値は変更されないことを意味します。
int exchange(int x,int y) { stack S; push(S,x); push(S,y); x=pop(S); y=pop(S); }
上記のアルゴリズムはすべて、他の変数の助けを借りずに 2 つの変数値の交換を実現します。それに比べて、算術アルゴリズムとビット演算は同じ量の計算を必要とします。アドレス アルゴリズムの計算はより複雑です。ただし、最初の 2 つは整数データのみを交換できるのに対し、大規模な計算 (カスタム クラスや構造体など) を簡単に実現できます (理論上、「^」演算子をオーバーロードすると、任意の構造体の交換も実現できます)。 )。
以上が3 番目の変数を使用せずに 2 つの変数の値を交換する 4 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









mdf ファイルと mds ファイルの使用方法 コンピューター技術の継続的な進歩により、さまざまな方法でデータを保存および共有できるようになりました。デジタル メディアの分野では、特殊なファイル形式に遭遇することがよくあります。この記事では、一般的なファイル形式である mdf および mds ファイルについて説明し、その使用方法を紹介します。まず、mdf ファイルと mds ファイルの意味を理解する必要があります。 mdf は CD/DVD イメージ ファイルの拡張子で、mds ファイルは mdf ファイルのメタデータ ファイルです。

CrystalDiskMark は、シーケンシャルおよびランダムの読み取り/書き込み速度を迅速に測定する、ハード ドライブ用の小型 HDD ベンチマーク ツールです。次に、編集者が CrystalDiskMark と Crystaldiskmark の使用方法を紹介します。 1. CrystalDiskMark の概要 CrystalDiskMark は、機械式ハード ドライブとソリッド ステート ドライブ (SSD) の読み取りおよび書き込み速度とパフォーマンスを評価するために広く使用されているディスク パフォーマンス テスト ツールです。 ). ランダム I/O パフォーマンス。これは無料の Windows アプリケーションで、使いやすいインターフェイスとハード ドライブのパフォーマンスのさまざまな側面を評価するためのさまざまなテスト モードを提供し、ハードウェアのレビューで広く使用されています。

foobar2000 は、音楽リソースをいつでも聴くことができるソフトウェアです。あらゆる種類の音楽をロスレス音質で提供します。音楽プレーヤーの強化版により、より包括的で快適な音楽体験を得ることができます。その設計コンセプトは、高度なオーディオをコンピュータ上で再生可能 デバイスを携帯電話に移植し、より便利で効率的な音楽再生体験を提供 シンプルでわかりやすく、使いやすいインターフェースデザイン 過度な装飾や煩雑な操作を排除したミニマルなデザインスタイルを採用また、さまざまなスキンとテーマをサポートし、自分の好みに合わせて設定をカスタマイズし、複数のオーディオ形式の再生をサポートする専用の音楽プレーヤーを作成します。過度の音量による聴覚障害を避けるために、自分の聴覚の状態に合わせて調整してください。次は私がお手伝いさせてください

NetEase Mailbox は、中国のネットユーザーに広く使用されている電子メール アドレスとして、その安定した効率的なサービスで常にユーザーの信頼を獲得してきました。 NetEase Mailbox Master は、携帯電話ユーザー向けに特別に作成された電子メール ソフトウェアで、電子メールの送受信プロセスが大幅に簡素化され、電子メールの処理がより便利になります。 NetEase Mailbox Master の使い方と具体的な機能について、以下ではこのサイトの編集者が詳しく紹介しますので、お役に立てれば幸いです。まず、モバイル アプリ ストアで NetEase Mailbox Master アプリを検索してダウンロードします。 App Store または Baidu Mobile Assistant で「NetEase Mailbox Master」を検索し、画面の指示に従ってインストールします。ダウンロードとインストールが完了したら、NetEase の電子メール アカウントを開いてログインします。ログイン インターフェイスは次のとおりです。

クラウド ストレージは今日、私たちの日常生活や仕事に欠かせない部分になっています。中国有数のクラウド ストレージ サービスの 1 つである Baidu Netdisk は、強力なストレージ機能、効率的な伝送速度、便利な操作体験により多くのユーザーの支持を得ています。また、重要なファイルのバックアップ、情報の共有、オンラインでのビデオの視聴、または音楽の聴きたい場合でも、Baidu Cloud Disk はニーズを満たすことができます。しかし、Baidu Netdisk アプリの具体的な使用方法を理解していないユーザーも多いため、このチュートリアルでは Baidu Netdisk アプリの使用方法を詳しく紹介します。まだ混乱しているユーザーは、この記事に従って詳細を学ぶことができます。 Baidu Cloud Network Disk の使用方法: 1. インストール まず、Baidu Cloud ソフトウェアをダウンロードしてインストールするときに、カスタム インストール オプションを選択してください。

MetaMask (中国語ではリトル フォックス ウォレットとも呼ばれます) は、無料で評判の高い暗号化ウォレット ソフトウェアです。現在、BTCC は MetaMask ウォレットへのバインドをサポートしており、バインド後は MetaMask ウォレットを使用してすぐにログイン、値の保存、コインの購入などが可能になり、初回バインドで 20 USDT のトライアル ボーナスも獲得できます。 BTCCMetaMask ウォレットのチュートリアルでは、MetaMask の登録方法と使用方法、および BTCC で Little Fox ウォレットをバインドして使用する方法を詳しく紹介します。メタマスクウォレットとは何ですか? 3,000 万人を超えるユーザーを抱える MetaMask Little Fox ウォレットは、現在最も人気のある暗号通貨ウォレットの 1 つです。無料で使用でき、拡張機能としてネットワーク上にインストールできます。

スピーカーの再生ボタンを長押し後、ソフトウェア内でWi-Fiに接続すると使用可能になります。チュートリアル 該当するモデル: Xiaomi 12 システム: EMUI11.0 バージョン: Xiaoai Classmate 2.4.21 分析 1 まずスピーカーの再生ボタンを見つけ、長押ししてネットワーク配信モードに入ります。 2 携帯電話の Xiaoai Speaker ソフトウェアで Xiaomi アカウントにログインし、クリックして新しい Xiaoai Speaker を追加します。 3. Wi-Fi の名前とパスワードを入力した後、Xiao Ai に電話して使用することができます。補足: Xiaoai Speakerにはどのような機能がありますか? 1 Xiaoai Speakerには、システム機能、ソーシャル機能、エンターテイメント機能、ナレッジ機能、ライフ機能、スマートホーム、トレーニングプランがあります。概要/注意事項: 簡単に接続して使用するには、Xiao Ai アプリを事前に携帯電話にインストールしておく必要があります。

Appleは火曜日にiOS 17.4アップデートを公開し、iPhoneに多数の新機能と修正をもたらした。このアップデートには新しい絵文字が含まれており、EU ユーザーは他のアプリ ストアから絵文字をダウンロードすることもできます。さらに、このアップデートでは iPhone のセキュリティ制御も強化され、より多くの「盗難デバイス保護」設定オプションが導入され、ユーザーにより多くの選択肢と保護が提供されます。 「iOS17.3では、「盗難デバイス保護」機能が初めて導入され、ユーザーの機密情報のセキュリティが強化されています。ユーザーが自宅やその他の身近な場所から離れている場合、この機能ではユーザーは最初に生体認証情報を入力する必要がありますApple ID パスワードの変更や盗難デバイス保護の無効化など、特定のデータにアクセスして変更するには、情報を再度入力する必要があります。
