簡體   English   中英

以x86為目標時在c ++中進行算術移位的可靠性

[英]Reliability of having arithmetic shift in c++ when targeting x86

所以根據c ++規范

E1 >> E2的值是E1右移E2位的位置。 如果E1具有無符號類型,或者E1具有帶符號類型和非負值,則結果的值是E1 / 2 ^ E2商的整數部分。 如果E1具有帶符號的類型和負值,則結果值由實現定義。

因此,它是由實現定義的,但是如果我使用的是針對x86平台的無錯誤編譯器,並且我使用有符號類型進行了右移,是否有任何理由懷疑我是否不會移入有符號位? (x86顯然支持算術移位)

不要將“實現定義”與“未定義”混淆。 從字面上看,“實現定義”是指“實現必須定義它”。 它不是隨機的,甚至不是您必須通過實驗確定的東西。 該行為由實現定義,並且符合標准的實現將記錄這些行為詳細信息(因為這樣做本身就不符合要求)。 除實現錯誤外,程序將忠實地展示其C ++實現定義的行為。

盡管您不能依賴未定義行為的任​​何內容,但是可以依賴實現定義的行為來在給定的C ++實現中保持一致。 但是,不能斷定,相同硬件的不同實現將以相同的方式定義這些細節,或者甚至相同實現的不同版本也將以這種方式保持一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM