[英]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_modulo
的bool
。 如果為false
則您的代碼是未定義的行為,但是,如果為true
則將執行您所設置的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.