【1行でスワップ】C/C++・Python・PHP・Javaで2つの変数を入れ替える方法
このチュートリアルでは、さまざまなプログラミング言語において、2つの変数の値を入れ替える(スワップする)方法を解説します。スワップとは、2つの変数が持つ値をお互いに交換することです。まずは具体例を見てみましょう。
入力
a = 3 b = 5
出力
a = 5 b = 3
それでは、言語ごとに順番に見ていきましょう。
Pythonの場合
Pythonでは、わずか1行のコードで変数をスワップできます。タプルのアンパックという機能を利用した、非常にシンプルな書き方です。以下のコードをご覧ください。
コード例
# 変数の初期化
a, b = 3, 5
# スワップ前の値を出力
print("Before swapping:-", a, b)
# スワップ処理
a, b = b, a
# スワップ後の値を出力
print("After swapping:-", a, b)
実行結果
上記のコードを実行すると、次のような出力が得られます。
Before swapping:- 3 5 After swapping:- 5 3
C/C++・PHP・Javaの場合(XOR演算を利用)
C/C++、PHP、Javaなどの言語では、XOR(排他的論理和)演算子を活用することで、一時的な変数を用意せずにスワップを実現できます。この手法を使えば、こちらも1行でスワップを完了させることが可能です。プログラムを書く手順は以下の通りです。
- 異なる2つの値で変数を初期化します。
- 2つの変数に対してXOR演算を行い、その結果を最初の変数に代入します。
- 再度XOR演算を行い、その結果を2番目の変数に代入します。
- もう一度XOR演算を行い、その結果を最初の変数に代入します。
- 以上で、2つの変数の値が入れ替わります。
それでは、各言語のコードを見ていきましょう。
C/C++の場合
コード例
#include <stdio.h>
int main() {
int a = 3, b = 5;
printf("Before Swapping:- %d %d\n", a, b);
(a ^= b), (b ^= a), (a ^= b);
printf("After Swapping:- %d %d\n", a, b);
return 0;
}
実行結果
上記のコードを実行すると、次のような出力が得られます。
Before Swapping:- 3 5 After Swapping:- 5 3
Javaの場合
コード例
class Swap {
public static void main(String[] args) {
int a = 3, b = 5;
System.out.println("Before Swapping:- " + a + " " + b);
a = a ^ b ^ (b = a);
System.out.println("After Swapping:- " + a + " " + b);
}
}
実行結果
上記のコードを実行すると、次のような出力が得られます。
Before Swapping:- 3 5 After Swapping:- 5 3
PHPの場合
コード例
<?php
$a = 5;
$b = 10;
echo "Before Swapping:- ", $a, " ", $b, "\n";
($a ^= $b);
($b ^= $a);
($a ^= $b);
echo "After Swapping:- ", $a, " ", $b;
?>
実行結果
上記のコードを実行すると、次のような出力が得られます。
Before Swapping:- 5 10 After Swapping:- 10 5
まとめ
このように、Pythonではタプルのアンパックを、C/C++・PHP・JavaではXOR演算を利用することで、一時変数なしの「1行スワップ」が実現できます。ただし、XORによるスワップはコードの意図が分かりにくくなりやすいため、実務では可読性を優先して一時変数を使う、あるいは言語が提供する標準的な手法(例:PHPの list($a, $b) = [$b, $a];)を採用するのも有効です。用途やチームのコーディング規約に合わせて使い分けましょう。
このチュートリアルについて不明な点がある場合は、コメント欄でお気軽にお知らせください。
-
C/C++で1行のコードを使って2つの変数を入れ替える方法
C言語では、一時的な変数(テンポラリ変数)を使わずに、たった1行のコードで2つの変数の値を入れ替えることができます。ここでは、代表的な2つの方法をサンプルコード付きで紹介します。 サンプルコード #include <stdio.h> int main() { int a = 28, b = 8; a += b -= a = b - a; // 方法1 printf("After Swapping : %d\t%d", a, b); (a ^= b), (b ^= a), (a ^= b); // 方法2 printf(
-
C++で線分のもう一方の端点を求める方法|一方の端点と中点から計算する
問題概要この問題では、線分の一方の端点A(xA, yA)と中点M(xM, yM)の座標が与えられ、もう一方の端点Bの座標を求めることが課題となります。具体的な例で問題を確認しましょう。入力:A = [1, 2], M = [3, 0]出力:[5, -2]解説この線分は下図のように表されます。解法のアプローチこの問題は、数学で学んだ幾何学の知識を使えばシンプルに解くことができます。まず、線分の中点を求める基本公式を思い出しましょう。mid(x) = (x1 + x2) / 2 mid(y) = (y1 + y2) / 2しかし今回の問題では、中点の座標がすでに与えられており、むしろもう一方の端点