【译】为什么这样宏定义#define INT_MIN (-2147483647 - 1)?
2的32次方為2147483648*2,0~(2147483648*2-1)這是32位機上無符號整數代表的范圍。而32機的int范圍為-2147483648~+2147483647
stackoverflow.com上有人提出這樣一個問題:
if (-2147483648 > 0)std::cout << "true"; elsestd::cout << "false";這將輸出true,
而下面的程序會輸出false:
下面是對排名第一答案的翻譯:
-2147483648不是一個“數”。實際上,-2147483648是一個表達式:一個正整數2147483648和一個一維運算符“-”。對于32位機,2147483648明顯已經超過了int的范圍。如果long?int有“更大的范圍”,編譯器會自動的假定2147483648為long?int型。(C++11的編譯器會假定為long long?int型)。這樣才會得到用戶想要的“負的2147483648”
然而很明顯,如果long?int和int一樣,就不會存在“更大的范圍”了。這樣的話,2147483648溢出了,你的程序的行為是未定義的。
所以,通常我們這樣定義
#define INT_MIN (-2147483647 - 1)而不是,看似更直接的定義
#define INT_MIN -2147483648后者可能造成意想不到的結果
原文地址:http://stackoverflow.com/questions/14695118/2147483648-0-returns-true-in-c#
轉載于:https://www.cnblogs.com/jacklu/p/4528069.html
總結
以上是生活随笔為你收集整理的【译】为什么这样宏定义#define INT_MIN (-2147483647 - 1)?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js简单的设置快捷键,hotkeys捕获
- 下一篇: 三层的之间的引用