目次
概要
複合代入演算子は、算術やビット操作を行いながら同じ変数へ結果を格納できる構文です。計算と代入を一文で記述できるため、ソースコードを簡潔に保ちつつ意図を明確にできます。本記事では十種類の演算子を順に適用し、値の変化を確認するサンプルを提示しながら、使用上の注意点を整理いたします。
サンプルコード
// 十種類の複合代入演算子を順に適用するサンプル
#include <iostream>
int main(int /*argc*/, char* /*argv*/[])
{
int reg = 20; // 初期値
std::cout << "start: " << reg << '\n';
reg += 5; std::cout << "+=: " << reg << '\n'; // reg = reg + 5
reg -= 3; std::cout << "-=: " << reg << '\n'; // reg = reg - 3
reg *= 2; std::cout << "*=: " << reg << '\n'; // reg = reg * 2
reg /= 4; std::cout << "/=: " << reg << '\n'; // reg = reg / 4
reg %= 7; std::cout << "%=: " << reg << '\n'; // reg = reg % 7
reg &= 6; std::cout << "&=: " << reg << '\n'; // reg = reg & 6
reg |= 9; std::cout << "|=: " << reg << '\n'; // reg = reg | 9
reg ^= 12; std::cout << "^=: " << reg << '\n'; // reg = reg ^ 12
reg <<= 1; std::cout << "<<=: " << reg << '\n'; // reg = reg << 1
reg >>= 2; std::cout << ">>=: " << reg << '\n'; // reg = reg >> 2
return 0;
}
コード解説
行 | 説明 |
---|---|
2 | #include <iostream> により標準入出力を使用します。 |
6 | int reg = 20; で演算対象の変数を初期化します。 |
8 | += は加算と代入を同時に実行します。 |
9 | -= は減算後に結果を変数へ保存します。 |
10 | *= は乗算の結果を再格納します。 |
11 | /= は除算後の値を保持します。 |
12 | %= は剰余を求めて代入します。 |
13 | &= はビット AND を適用します。 |
14 | ` |
15 | ^= はビット XOR を適用します。 |
16 | <<= はビットを左にシフトします。 |
17 | >>= はビットを右にシフトします。 |
応用
複数回の加算やビットフラグ操作を行う場合、複合代入演算子をループ内で用いると記述量が減り可読性が向上します。ビット演算では符号拡張の影響を避けるため、固定幅整数型を使用すると安全です。また、演算前後の値をログに残すことで、デバッグ時の確認作業が容易になります。
まとめ
複合代入演算子は、一文で演算と代入を完結させることでコードを簡潔にする反面、演算順序を誤ると意図しない結果を招く場合があります。各演算子の動作とビット演算特有の注意点を理解し、適切な場面で活用することで、保守性と効率を両立した実装が可能となります。