C#で2つの数値を入れ替える(スワップする)方法
C#で2つの数値の値を入れ替える(スワップする)場合、一時的な変数を使わずに、足し算と引き算を組み合わせたロジックで実現できます。ここでは、その基本的な考え方と実際のコード例を紹介します。
入れ替えの基本的なロジック
まず、入れ替える対象となる2つの変数を用意します。
val1 = 100; val2 = 200;
次に、以下の3つの演算を行うことで、変数の値を入れ替えることができます。
val1 = val1 + val2; val2 = val1 - val2; val1 = val1 - val2;
仕組みの解説
このロジックがどのように機能するのか、順を追って確認してみましょう。
- val1 = val1 + val2; → val1 に「100 + 200 = 300」が代入されます。
- val2 = val1 - val2; → val2 に「300 - 200 = 100」(元の val1 の値)が代入されます。
- val1 = val1 - val2; → val1 に「300 - 100 = 200」(元の val2 の値)が代入されます。
このように、3回の演算だけで2つの変数の値が完全に入れ替わります。一時変数(テンポラリ変数)を宣言する必要がないのが特徴です。
サンプルコード
以下は、上記のロジックを実際にC#で実装した完全なコード例です。
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
int val1, val2;
val1 = 100;
val2 = 200;
Console.WriteLine("Values before swap...");
Console.WriteLine(val1.ToString());
Console.WriteLine(val2.ToString());
val1 = val1 + val2;
val2 = val1 - val2;
val1 = val1 - val2;
Console.WriteLine("Values after swap...");
Console.WriteLine(val1.ToString());
Console.WriteLine(val2.ToString());
Console.ReadLine();
}
}
}
実行結果
Values before swap... 100 200 Values after swap... 200 100
注意点
この手法はシンプルで便利ですが、int型などの固定サイズの整数型を使用する場合、2つの値の合計が型の最大値(int型の場合は 2,147,483,647)を超えるとオーバーフローが発生する可能性があります。大きな値を扱う場合は、long型へのキャストや、従来通りの一時変数を使った方法(temp = val1; の形式)、あるいはタプルを使った (val1, val2) = (val2, val1); といったモダンな記法も検討するとよいでしょう。
-
2進数同士の乗算を最速で行う方法 ― 分割統治法による効率的なアルゴリズム
2つの数が2進数(バイナリ)の文字列として与えられたとき、それらの積をいかに速く、効率的に求めるか。本記事ではその手法を詳しく解説します。 この問題は分割統治法(Divide and Conquer)を用いることで、非常に高い効率で解決できます。基本的なアイデアは、それぞれの数を前半と後半の2つの部分に分割し、部分ごとの結果を組み合わせて全体の積を得ることです。 ここで、最初の数 X を Xleft と Xright に、2番目の数 Y を Yleft と Yright に分割すると、積は次のように表されます。 さらに計算をシンプルにするため、上式は次のように変形できます。 この手法は
-
iPhoneで2つの電話番号を使う方法【デュアルSIM・アプリ活用術】
昔からある冗談に、「携帯電話を2台持っている人は、麻薬の売人か不倫中のどちらかだ」というものがあります。しかし実際には、2つの別々の電話番号を維持したい正当な理由はたくさんあります。仕事で夜遅くでも連絡が取れる必要があるものの、友人たちからの電話用の端末は電源を切りたいという人もいれば、仕事関係の連絡が家族との大切な時間を妨げるのを避けたいという人もいます。ちなみに、特定の人からの着信だけをブロックしたいだけであれば、もっと簡単な方法があります。「おやすみモード」を活用しましょう。コントロールセンターからおやすみモードをオンにし、「設定」>「おやすみモード」>「通知を許可」の順に進