C++如何判斷一個整數溢出?
01-04
加減法可以看標誌位,乘法的話只要除回來發現跟原來的數字不一樣就溢出了
加減法看標誌位
乘法的話,可以先用大一倍位長的臨時變數保存,然後再看看截斷後跟原值是不是一樣就行了,比如:
int64_t tmp = (int64_t)x * (int64_t)y;
if ((int64_t)((int32_t)tmp) != tmp) {
// overflow occurred
}
計算之後,無法判斷,除非有計算前的輸入信息
最笨的辦法就是使用long long,反正現在的計算機又不在乎這一點內存。
最笨的辦法就是最好的辦法!
這個辦法簡單易用易學。推薦閱讀:
※c語言中一個函數的聲明和定義有區別嗎?
※C++中生成隨機數的問題?
※*a.b()是什麼意思,運算符順序是怎麼看的?
※CS、360、這些軟體的根目錄下有很多不同類型的文件。在沒有VS、JDK這些「程序設計語言」的「支持?
※能不能用c#和c/c++以及其他語言寫一個完整的IDE(類似visual studio)?