デクリメントとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 日本語表現辞典 > デクリメントの意味・解説 

decrement

別表記:デクリメント

「decrement」の意味・「decrement」とは

「decrement」は、英語の単語であり、数値や量が減少すること、またはその減少自体を指す。プログラミング世界では変数の値を一定量減らす操作を指すこともある。例えば、変数xが10のとき、decrement操作を行うと、xの値は9になる。

「decrement」の発音・読み方

「decrement」の発音は、IPA表記では/dɪˈkrɛmənt/となる。このIPAカタカナ読みは「ディクレメント」であり、日本人発音するカタカナ英語では「ディクリメント」に近い。この単語発音によって意味や品詞が変わる単語ではない。

「decrement」の定義を英語で解説

「decrement」は、英語で"The act or process of decreasing or becoming less."と定義される。これは「減少する行為過程、または減少すること自体」を意味する

「decrement」の類語

「decrement」の類語としては、「decrease」、「reduction」、「decline」、「diminution」などがある。これらの単語同様に、何かが減少することを表す。

「decrement」に関連する用語・表現

「decrement」に関連する用語としては、「increment」がある。これは「decrement」の反対で、数値や量が増加すること、またはその増加自体を指す。

「decrement」の例文

1. The decrement in the population was due to the epidemic.(その人口の減少疫病原因であった。)
2. The decrement of the variable was performed in the loop.(その変数のデクリメントはループ内で行われた。)
3. The decrement in sales was significant.(その売上減少大きかった。)
4. The decrement operation is often used in programming.(デクリメント操作プログラミングでよく使われる。)
5. The decrement in temperature was noticeable.(その温度減少顕著だった。)
6. The decrement of the counter was done every second.(そのカウンターのデクリメントは毎秒行われた。)
7. The decrement in the stock price was unexpected.(その株価減少予期しなかった。)
8. The decrement of the array index was necessary for the algorithm.(その配列インデックスのデクリメントはアルゴリズム必要だった。)
9. The decrement in the number of students was due to the new policy.(その学生数の減少新し政策原因だった。)
10. The decrement operation is the opposite of the increment operation.(デクリメント操作インクリメント操作反対である。)

デクリメント【decrement】

読み方:でくりめんと

コンピュータープログラムなどにおいて、整数型変数の値を1減らす処理のこと。⇔インクリメント


デクリメント

【英】decrement

デクリメントとは、コンピュータプログラミング関係用語としては、変数の値を1減らす演算のことである。「decrement」は一般的な英単語としては、「減少」を意味する

なお、デクリメントと反対に変数の値を1増加させる演算インクリメント呼ばれる

プログラミングのほかの用語一覧
コーディング:  2進数  8進数  ダミー命令  デクリメント  飛び越し命令  トラップ  UML

インクリメント

(デクリメント から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/01/24 16:06 UTC 版)

インクリメント (: increment) は、一般には増加・増量・増分・増大という意味だが、コンピュータ用語としては、変数の値を1増やす演算のことである[1]

逆に、1減らす演算はデクリメント (: decrement) という[2]

概要

インクリメント操作はループにおけるカウンタの増減や、逐次アドレッシングなどで使用頻度が極めて高いため、プロセッサレベルで専用の命令が用意されていることが多い。また、プログラミング言語のレベルでも、インクリメントをするときのための「インクリメント演算子」が用意されていることが多い。さらに、コンパイラのレベルでも、インクリメント演算子に対して最適化してくれる場合が多い。その場合、算術演算子(C言語では+)や累算代入(複合代入)演算子(+=)を使うよりもインクリメント演算子(++)を使ったほうが、コンパイラがプロセッサのインクリメント命令を使うようなコードを生成してくれて高速になる可能性が高い。

しかし、「加算/減算」という概念とは別に「インクリメント/デクリメント」という概念を扱うのは初心者にとって煩雑になり、ある程度慣れたプログラマであっても演算子の評価順序を見誤るとバグの元となる場合がある[注釈 1]。またマイコンレベルでも必須というわけではないため、インクリメント命令を搭載しない場合がある。また、コンパイラの最適化が進んでいた場合、インクリメントを使っても算術演算子を使っても、どちらも同じ(最も速くなる)機械語を生成するので、現代の主要な開発環境およびコンパイラを使っている場合は、あえてインクリメントを使って処理速度を稼ぐ必要はない。そのため、インクリメントという概念をあえて排除する場合もある。例えば、情報処理技術者試験で用いられる仮想計算機COMET IIの命令セットにはインクリメント命令が存在しない。プログラミング言語のPascalにはインクリメント演算子がないが、Object PascalDelphi)にはSystem.Inc()手続きとSystem.Dec()手続きが存在し、場合によっては最適化されたコードに置き換えられる[4][5]Free PascalにもInc()手続きとDec()手続きが実装されている[6][7]

なお、PythonVisual Basic .NETにはインクリメント演算子は存在しないが、++xというコードは単項の+演算子を2回適用する+(+x)と同様に解釈されるため、変数xの中身が数値の場合は構文エラーにはならず、値をそのまま返す式として評価される。

プロセッサでの扱い

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

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

Windows APIではスレッドセーフアトミック操作のための関数として、InterlockedIncrement()などが用意されている[8].NETにはSystem.Threading.InterlockedクラスにIncrement()メソッドなどが用意されている[9]Javaにはjava.util.concurrent.atomic.AtomicIntegerクラスにincrementAndGet()メソッドなどが用意されている。これらはコンパイラによってアトミック命令などを使った排他制御に置き換えられる。

高水準言語での扱い

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

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

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

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

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

しかし、前置と後置という些細な違いでプログラムの挙動が変わるので、可読性の低下やバグの要因となることが多い。Swiftには当初C言語と類似のインクリメント演算子とデクリメント演算子があったが、可読性の優先や言語学習コスト低減などの観点から、Swift 3.0で廃止(削除)された[12]

真理値とインクリメント

アセンブリ言語(アセンブラ)や初期のプログラミング言語は、真理値を表す専用のデータ型(ブーリアン型)を持たず、整数型で代用することが多かった。整数で代用する場合、通例0を偽 (false) として扱い、また0以外をすべて真 (true) として扱う。C言語はこの仕様を引きずっており、論理演算の結果は基本整数型intとなる。これはANSI C(C89)以前だけでなく、組み込みのブーリアン型_Boolが追加されたC99以降も変わらない。

このようにブーリアン型として整数型を使用すると、本来インクリメントで記述する必要がない(インクリメントで記述してはいけない)コードにも、誤って使われてしまうことがある。例えば真理値を表すフラグ変数の値を偽から真に変更する場合、通常は変数に何らかの固定値(一般的な代表値としては1)を代入する。しかし、整数型では0をインクリメントすると1になることから、代入ではなくインクリメントでも偽から真に変更することができてしまう。

ソフトウェア工学安全工学の未発達な時代に、不適切なインクリメント命令の使用が致命的なバグを生み、重篤な事故を引き起こした事例として、放射線療法機器のセラック25が挙げられる。セラック25は1985年から1987年にかけて知られる限り6つの重大な被曝事故を引き起こし、少なくとも5人の患者を死亡させた。事故原因には複数の要因があるが、まずセラック25は従来機に搭載されていた電気機械式の安全保護装置(ハードウェア・インターロック)を取り除き、(当時はハードウェア制御よりも安全だと思われていた)ソフトウェア制御に置き換えてしまっていた。装置を制御するコンピュータPDP-11オペレーティングシステム[注釈 3]において、安全性を確保するためのソフトウェア・インターロックのひとつに使われていた、Class3と呼ばれるフラグ変数は、値が0以外の場合、装置に何らかの不一致があり、放射線治療を続行できないことを意味するものだった。セットアップテストのルーチンを通過するたびにClass3変数の値がインクリメントされるコードになっていたが、このClass3変数は1バイト(1オクテット)であり、十進数で0から255までの数値しか表現できない。値が255のときにインクリメントしてしまうと、オーバーフローが発生して0に戻ってしまう。この異常動作はセットアップテストを256回通過するたびに発生する。つまり、本来はフラグが真でなければならない場面で偽となり、障害が正しく検出されないというバグが存在していた[14]。これにより、装置の安全チェックがバイパスされてしまい、患者に過度の放射線が照射され、患者が死亡する可能性があった。当初セラック25のメーカーはこのバグに気づかず、「事故は起こりえない」と回答したことが被害を拡大させた。

なお、Cとは異なり、C++には、ISO規格として標準化される前にリリースされた段階でbool型が存在していた。C++98規格として標準化された時点で、このbool型は値としてfalse (0) あるいはtrue (1) のみをとることが保証されるようになった(とはいえ、すべてのC++実装がこの規格で定められた仕様に正しく準拠していたわけではない)。また、bool型の値をどれだけインクリメントしてもtrueとなるように定められていたが、boolに対するインクリメントはC++98の時点で非推奨となっていた(この仕様決定にセラック25の教訓が反映されていたかどうかは定かではない)。その後、C++17で、インクリメント演算子「++」がbool型に適用できないように規定され、bool型へのインクリメントは正式に削除された[15]

JavaC#のような後発の安全な言語では、ブーリアン型へのインクリメントは登場当初から禁止されている。

ネーミングでの使用

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

increment」の形容詞形「incremental」は、インクリメンタルサーチインクリメンタルビルド(増分ビルド)といったソフトウェア機能の名称に使われることもある。

脚注

注釈

  1. ^ 特にC言語では式としてインラインでの書きやすさゆえにインクリメント演算子が乱用されることがあり、未定義動作未規定動作を引き起こしやすい[3]
  2. ^ JIS X 3010:2003「プログラム言語C」では「増分演算子」と翻訳されている。
  3. ^ セラック25のソフトウェアはアセンブリ言語で書かれていた[13]

出典

関連項目



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「デクリメント」の関連用語

デクリメントのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



デクリメントのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
実用日本語表現辞典実用日本語表現辞典
Copyright © 2025実用日本語表現辞典 All Rights Reserved.
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2025 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【デクリメント】の記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのインクリメント (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS