404 Not Found

404 Not Found


nginx

C++の演算子

変数を使えばデータを保存できます。演算子を使えば、そのデータを操作できます――加算、比較、条件チェックなどです。演算子は、プログラミング言語における「動詞」のようなものだと考えてください。


1. 算術演算子

演算子 名称 結果
+ 追加 10 + 3 13
- 引き算 10 - 3 7
* 乗算 10 * 3 30
/ 部門 10 / 3 3 (⚠️)
% 剰余 10 % 3 1

(1) 整数除算の落とし穴

両方のオペランドが整数の場合、C++ は 整数除算 を行い(小数部を切り捨てて)、

CPP
int result = 10 / 3; // result is 3, NOT 3.333
double result2 = 10.0 / 3; // 3.33333 (at least one operand is double)
⚠️ 注意: これは初心者がよく犯す間違いの一つです。小数点を含む結果が必要な場合は、少なくとも一方のオペランドが double であることを確認してください。

(2) 剰余演算子 (%)

% は除算の余りを返します。これは次のような場合に役立ちます:



2. 関係(比較)演算子

値を比較するために使用されます。結果は常に bool (true または false) となります。

演算子 意味 結果
== これと同じ 5 == 3 false
!= 異なる 5 != 3 true
< 未満 5 < 3 false
> より大きい 5 > 3 true
<= 以下 5 <= 5 true
>= 以上 5 >= 3 true

(1) === の落とし穴

CPP
if (x = 5) { // ❌ Assignment, not comparison! x becomes 5
if (x == 5) { // ✅ Correct comparison
🔥 よくある間違い: = は代入、== は比較です。条件式で誤って = を使用すると、値を評価する代わりに代入されてしまいます。その結果、条件は常に true となります(ゼロ以外の値は真とみなされるため)。



3. 論理演算子

ブール条件を組み合わせたり、反転させたりします。

演算子 名称 結果
&& AND (5 > 3) && (5 < 10) true
|| または (5 > 3) || (5 > 10) true
! NOT !(5 > 3) false

(1) 短絡評価

C++は「遅延評価」を行う言語であり、結果が確定した時点で評価を停止します:

CPP
int x = 0;
if (x != 0 && 10 / x > 1) { // Safe! The second part is never evaluated when x is 0

(2) ▶ サンプル:1:閏年チェッカー(難易度 ⭐)

CPP
#include iostream

int main() {
 int year;
 std::cout << "Enter a year: ";
 std::cin >> year;
 
 bool isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
 
 if (isLeap) {
 std::cout << year << " is a leap year." << std::endl;
 } else {
 std::cout << year << " is not a leap year." << std::endl;
 }
 return 0;
}
▶ 試してみよう

4. 代入演算子

演算子 これと同等
= x = 5; x = 5
+= x += 3; x = x + 3
-= x -= 3; x = x - 3
*= x *= 3; x = x * 3
/= x /= 3; x = x / 3
%= x %= 3; x = x % 3


5. インクリメントとデクリメント

演算子 名称 効果
++ 増分 x++ または ++x 1ずつ増やす
-- 減算 x-- または --x 1を減らす

プレフィックスとポストフィックスの違い:

名前 動作
x++ ポストインクリメント まず現在の値を使用し、その後インクリメントする
++x プレインクリメント まず値をインクリメントし、その後新しい値を使用する
CPP
int x = 5;
int y = x++; // y = 5, x = 6 (use x first, then increment)

int a = 5;
int b = ++a; // b = 6, a = 6 (increment first, then use)

(1) ▶ サンプル:2:プレフィックスとポストフィックス(難易度 ⭐⭐)

CPP
#include iostream

int main() {
 int x = 5;
 std::cout << "x++: " << x++ << std::endl; // Output: 5 (then x becomes 6)
 std::cout << "Now x: " << x << std::endl; // Output: 6
 
 int y = 5;
 std::cout << "++y: " << ++y << std::endl; // Output: 6 (y becomes 6 first)
 
 return 0;
}
▶ 試してみよう

6. 演算子の優先順位

数学と同じように、C++の演算子にも優先順位があります。迷ったときは、括弧を使うようにしましょう!

優先順位 演算子 備考
1 (最高) () `` -> . 関数呼び出し、配列インデックス、メンバアクセス
2 ++ -- ! + - (単項) 接頭辞インクリメント、論理否定
3 * / % 乗算、除算、剰余
4 + - 足し算、引き算
5 < <= > >= 関係比較
6 == != 等価性チェック
7 && 論理 AND
8(最低) || 論理OR

(1) ▶ サンプル:3:演算子の優先順位(難易度 ⭐⭐)

CPP
int result = 5 + 3 * 2; // 11 (not 16!) because * has higher precedence
int result2 = (5 + 3) * 2; // 16 (parentheses override precedence)
bool check = 5 > 3 && 2 < 4; // true (relational before logical)
▶ 試してみよう
💡 ヒント: 演算子の優先順位がわからない場合は、単に括弧を付けるだけで済みます。プログラムの実行速度は落ちず、コードを読む人にとって意図が明確に伝わります。

(2) ▶ サンプル:4:難易度分類(難易度 ⭐⭐)

CPP
#include iostream

int main() {
 int score;
 std::cout << "Enter your score (0-100): ";
 std::cin >> score;
 
 char grade;
 if (score >= 90) grade = 'A';
 else if (score >= 80) grade = 'B';
 else if (score >= 70) grade = 'C';
 else if (score >= 60) grade = 'D';
 else grade = 'F';
 
 std::cout << "Your grade is: " << grade << std::endl;
 return 0;
}
▶ 試してみよう

▶ サンプル 1: operators overviewデモ (難易度 ⭐)

CPP
#include <iostream>

int main() {
 // operators overviewの
 std::cout << "operators overviewをびましょう!" << std::endl;
 return 0;
}
▶ 試してみよう

❓ よくある質問

Q なぜ 10 / 3 は 3.3333 ではなく 3 になるのですか?
A 両方のオペランドが整数であるため、C++ は整数除算を行い、小数部分を切り捨てます。小数結果を得るには、少なくとも一方のオペランドを double 型にします(例:10.0 / 3)。
Q % 演算子は負の数でも使用できますか?
A はい、使用できますが、結果の符号は除数によって異なります(C++11 標準)。ベストプラクティスとして、予期せぬ結果を避けるため、% を使用する際は正の整数に限定することをお勧めします。
Q なぜ 5 < x < 10 と記述できないのですか?
A これは数学的には正しいですが、C++の論理としては正しくないためです。代わりに 5 < x && x < 10 を使用してください。これは、論理ANDで接続された2つの比較式です。
Q i++ と ++i の実際の違いは何ですか?
A 単純な int 型の変数の場合、どちらを使ってもコンパイル後のコードは同じになります。イテレータやカスタム型の場合、++i の方が効率的です(一時的なコピーが不要)。i++ を使う特別な理由がない場合は、++i を使用することをお勧めします。

📖 まとめ


📝 練習問題

  1. 初心者(難易度 ⭐): 2つの整数を入力を受け取り、それらの和、差、積、商、余りを表示するプログラムを作成してください。

  2. 中級(難易度 ⭐⭐): 3桁の数字(例:365)を入力してもらい、各桁(百の位、十の位、一の位)を別々に表示するプログラムを作成してください。

  3. 上級(難易度 ⭐⭐⭐): 数字当てゲームを作成してください。プログラムは1から100までの間の乱数を生成し、ユーザーはその数字を当てる必要があります。推測するたびに、正解がわかるまでプログラムは「高すぎます!」または「低すぎます!」と表示します。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%