簡體   English   中英

在C ++中更改加號的符號

[英]change of sign of an addition in c++

我是C ++的新手,在嘗試通過蠻力執行某些操作時,同時添加了一些正整數,但我發現總和變成了負數。

通過仔細觀察,我注意到將2147483647與1相加將返回-2147483648。

有人知道為什么出現這個標志嗎?

這是眾所周知的,稱為整數溢出

有符號整數的最大值( 2147483647 )無法超過。
超過此值將導致環回至最小值-2147483648
它與內存的工作方式緊密相關。

有關整數溢出的更多信息。

從歷史上看,這是由於在普通CPU上發出硬件增量指令會導致您看到的行為。

在C和C ++ 11之前的C ++中,這實際上是未定義的行為 gcc -O3最新版本可能基於未定義的此操作(例如,在發生此操作的地方切掉流分支)來執行優化。

但是,自C ++ 11 std::numeric_limits<int>::is_modulo ,您可以檢查名為std::numeric_limits<int>::is_modulobool 如果為false則您的代碼是未定義的行為,但是,如果為true則將執行您所設置的代碼。

暫無
暫無

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

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