2

C/C++ で整数値をキャップするかオーバーフローするかを選択できますか? それとも、コンパイルされたものは依存していますか?

4

3 に答える 3

3

あなたが参照する「キャッピング」は「飽和」として知られています。デジタル シグナル プロセッサ (DSP) がハードウェアで飽和をサポートするのは一般的ですが、ほとんどのマイクロプロセッサは自然にオーバーフローとラップアラウンドを起こします。たとえば、MMX などの DSP 拡張をサポートするプロセッサは、飽和もサポートします。

サチュレーションの言語サポートは、通常、コンパイラの拡張機能、組み込み関数、およびライブラリによって行われます。おそらく C++ では、算術型を飽和させるためのテンプレート クラスを作成することが可能です。

この質問に対する私の答えから:

ISO/IEC JTC1 SC22 WG14 N1169 (プログラミング言語 - C - 組み込みプロセッサをサポートする拡張機能) は、_Satデータ型を飽和させるための型修飾子を指定します。どのコンパイラでも使用しようとしたことはありませんが、GCC 4.x のドキュメントに含まれています。

VC++ 2003 以降では、飽和演算を可能にするMMX 組み込み関数がサポートされています。

飽和演算をハードウェアでサポートしていないプロセッサでは、それを使用するとパフォーマンスが低下する可能性があることに注意してください。

于 2013-05-26T10:23:51.843 に答える