ホームページ > バックエンド開発 > C++ > 型幅を超える数の符号なし整数を右シフトすると、C では未定義の動作になりますか?

型幅を超える数の符号なし整数を右シフトすると、C では未定義の動作になりますか?

Linda Hamilton
リリース: 2024-11-02 12:16:30
オリジナル
599 人が閲覧しました

Is Right Shifting an Unsigned Integer with a Count Exceeding its Type Width Undefined Behavior in C  ?

カウントが型幅を超えた右シフトの未定義の動作

C の右シフト演算子 (>>) の動作は標準、特にセクション 5.8「シフト演算子」で定義されています。左オペランドの型の幅以上のシフト カウントが未定義の動作であるかどうかという疑問が生じます。

C 標準では、E1 >> の値は次のように規定されています。 E2 は、E1/2^E2 の商の整数部分です。ここで、E1 は左オペランド、E2 は右オペランドです。これは、E1 が符号なし型または非負値の符号付き型であり、E2 が負でない場合にのみ動作が定義されることを意味します。

ただし、この質問では、E1 が符号なし型である場合を考慮しています。 int であり、E2 は 34 であり、unsigned int の 32 ビット幅を超えています。標準では、この場合の動作は未定義であると明示的に述べられています。

したがって、商の計算に関する C 標準の記述にもかかわらず、カウントが 32 を超える unsigned int を右シフトする動作は未定義です。このため、GCC はそのようなシフトを実行するときに警告を発行します。

以上が型幅を超える数の符号なし整数を右シフトすると、C では未定義の動作になりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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