ホームページ > バックエンド開発 > C++ > C の符号付き整数オーバーフローはまだ未定義の動作ですか?

C の符号付き整数オーバーフローはまだ未定義の動作ですか?

Linda Hamilton
リリース: 2024-12-25 01:18:25
オリジナル
690 人が閲覧しました

Is Signed Integer Overflow in C   Still Undefined Behavior?

C の符号付き整数オーバーフロー : まだ未定義の動作

C 11 cstdint ドキュメントで強調されているように、int8_t、int16_t などの符号付き整数型、int32_t、および int64_t は使用します負の値の場合は 2 の補数。これは疑問を引き起こしました: これは、これらの型のオーバーフローが未定義の動作とみなされなくなったことを意味しますか?

いいえ、これらの型のオーバーフローは C では未定義の動作のままです。

C 11 標準のパラグラフ 5/4 によると、結果が数学的に定義されていない式、または型の表現可能な範囲外にある式は、次のようになります。未定義の動作。

int8_t、int16_t、int32_t、および int64_t は 2 の補数を使用しますが、これは 2^n を法とする算術演算が適用されることを意味するものではありません。この規格では、次のように明示的に規定されています。

「符号なし算術演算の結果は常に「数学的に定義」され、結果は常に表現可能な範囲内にあります。したがって、5/4 は適用されません。」

したがって、符号なし演算は 2^n を法とする算術の法則に従い、オーバーフローは未定義の動作ではありません。ただし、符号付き算術演算の場合、基礎となる表現に関係なく、オーバーフローの動作は未定義のままです。

以上がC の符号付き整数オーバーフローはまだ未定義の動作ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート