首頁 > 後端開發 > C++ > 右移計數超出其類型寬度的無符號整數 C 中的未定義行為嗎?

右移計數超出其類型寬度的無符號整數 C 中的未定義行為嗎?

Linda Hamilton
發布: 2024-11-02 12:16:30
原創
591 人瀏覽過

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,超出了無符號 int 的 32 位元寬度。標準明確指出這種情況下的行為是未定義的。

因此,儘管 C 標準中關於商計算的聲明,但右移計數大於 32 的無符號 int 的行為是未定義的。這就是 GCC 在執行此類轉變時發出警告的原因。

以上是右移計數超出其類型寬度的無符號整數 C 中的未定義行為嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板