2011-04-17 73 views
2
unsigned long long value = 0; 

bool result = value >= std::numeric_limits<signed int>::min(); 

這應該是正確的,但會給出錯誤?爲什麼以及如何修復它?無法正確比較兩個數字

+0

答案與您最後一個問題的答案相同(http://stackoverflow.com/questions/5692882/bug-in-boost-check)。 – 2011-04-17 14:25:00

回答

3

int轉換爲一個無符號整數進行比較。您可以將unsigned long long投射到long long

5/9:

意想不到的算術或枚舉類型 事業轉換 操作數,並以類似的方式產生 結果類型

許多二元運算符。 的目的是產生一個通用的類型, 這也是結果的類型。 這種模式被稱爲平常 算術轉換,這是 定義如下:

...

然後,如果 操作數是無符號長的 其他應轉換爲無 長。

...

否則,如果一個操作數是無符號 ,其他應換算 爲無符號。

unsigned long longlong long都不是標準的類型在C + + 03,但它很可能是編譯器會把使用上面定義的機制這些類型。上述轉換規則將涵蓋此特定轉換。