2013-10-13 40 views
0

我有一個比問題更大的奇怪。C++比奇怪更大

iGhostLen是-1,iMaxGhost是480. 但仍然行iGhostLen = iMaxGhost;被擊中。

是-1是一個特例還是我可能出錯的地方。 我不認爲-1大於480.

謝謝。

unsigned int iMaxGhost=(120 * 4); 
int iGhostLen=-1 

if (iGhostLen > iMaxGhost) 
{ 
    iGhostLen=iMaxGhost; 
} 
+0

我很確定這是因爲你正在比較一個帶符號的int和一個unsigned int。 – Chemistpp

+1

你編譯這個時看到的那些警告?你可能想要考慮他們的意思。而對於獎勵積分,當'iMaxGhost'是'unsigned short'時(僅僅是爲了在扳機上扔扳手)會發生什麼。 – WhozCraig

回答

1

由於比較了帶符號和無符號整數,您應該會收到編譯器警告。將unsigned int更改爲int,然後閱讀一些關於數字表示的內容。

+0

謝謝。但爲什麼「>」語句不能比較unsigned int和signed int? – tmighty

+1

@tmighty,'unsigned int'包含比'int'和'int'更多的負值。它將不得不使用更大的類型,並且保留最大類型僅用於比較會有點愚蠢,所以選擇使簽名值無符號。 – chris

+0

你做什麼?在我的代碼另一部分我有以下代碼這也給我一個編譯器警告:\t \t對(INT H = iHPStart; H <(int)的uPhrase.HalfphonesInLine.size() - 2; H ++) \t \t { \t \t \t if(h == uPhrase.HalfphonesInLine.size() - 2)我覺得我的代碼很好,但現在我認爲它是不整潔的。你如何處理這種情況? – tmighty

0

發生這種情況是因爲iMaxGhost未簽名,但iGhostLen已簽名。有符號的值將被轉換爲轉換的無符號值(因此-1會變成非常大的值)。

您可以通過將iMaxGhost更改爲帶符號的整數或通過爲負值設置特殊情況來解決此問題。