インクリメント

提供: miniwiki
2018/8/19/ (日) 17:28時点におけるAdmin (トーク | 投稿記録)による版 (1版 をインポートしました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索

インクリメント、増量 (increment) は、一般には増加という意味だが、コンピュータ用語としては、変数の値を1増やす演算のことである。逆に、1減らす演算はデクリメント (decrement) である。

プロセッサでの扱い

ループや逐次アドレッシングで使用頻度が極めて高いため、プロセッサレベルで専用のインクリメント命令が用意されていることが多い。

通常、レジスタに数値を加算するには、1ワード加算命令とレジスタを表し、もう1ワードで加算する数値を表すので、計2ワードが必要だが、インクリメント命令を使えば1ワードで済む。ただし、プロセッサによっては、インクリメント命令は加算命令よりもオペランドの種類が限られる(たとえばアキュムレータのみに可能など)。

アセンブラの中には、1を加算する加算命令をインクリメント命令に最適化するものもある。

高水準言語での扱い

C言語C++JavaJavaScriptなどでは、インクリメント演算子(増量子)「++」が用意されている。前置インクリメントと後置インクリメントの2種類がある。字句は同じ「++」だが前置演算子として使うか(例: ++x)後置演算子として使うか(例: x++)で意味が違う。オペランドの値が整数の場合は1、ポインタの場合は指し示す対象1個ぶん変わるのはどちらも同じだが、式としての値が、前置の場合はインクリメントした後の値になる(この意味は += 1 と同じ)、後置の場合はインクリメントする前の値になる。

y = ++x;    // y = (x += 1); と同じ
y = x++;    // y = x; x = x + 1; と同じ

C++の演算子オーバーロードでは、通常の記法では前置インクリメントと後置インクリメントを区別できないので、便宜上、後置インクリメントには余分なint型引数を記述して区別する。ただし、古いC++コンパイラはこの後置インクリメントの宣言に対応していないことがある。

T& class T::operator++{ *this += 1; return *this; }                     // 前置インクリメントのオーバーロード
T class T::operator++(int){ T old = *this; *this += 1; return old; }    // 後置インクリメントのオーバーロード

デクリメント演算子「--」も同様である。

ネーミングでの使用

C++、Notepad++のように、改良版であることを示すためにインクリメント演算子「++」をつけることがある。