我有一個比問題更大的奇怪。C++比奇怪更大
iGhostLen是-1,iMaxGhost是480. 但仍然行iGhostLen = iMaxGhost;被擊中。
是-1是一個特例還是我可能出錯的地方。 我不認爲-1大於480.
謝謝。
unsigned int iMaxGhost=(120 * 4);
int iGhostLen=-1
if (iGhostLen > iMaxGhost)
{
iGhostLen=iMaxGhost;
}
我有一個比問題更大的奇怪。C++比奇怪更大
iGhostLen是-1,iMaxGhost是480. 但仍然行iGhostLen = iMaxGhost;被擊中。
是-1是一個特例還是我可能出錯的地方。 我不認爲-1大於480.
謝謝。
unsigned int iMaxGhost=(120 * 4);
int iGhostLen=-1
if (iGhostLen > iMaxGhost)
{
iGhostLen=iMaxGhost;
}
由於比較了帶符號和無符號整數,您應該會收到編譯器警告。將unsigned int
更改爲int
,然後閱讀一些關於數字表示的內容。
謝謝。但爲什麼「>」語句不能比較unsigned int和signed int? – tmighty
@tmighty,'unsigned int'包含比'int'和'int'更多的負值。它將不得不使用更大的類型,並且保留最大類型僅用於比較會有點愚蠢,所以選擇使簽名值無符號。 – chris
你做什麼?在我的代碼另一部分我有以下代碼這也給我一個編譯器警告:\t \t對(INT H = iHPStart; H <(int)的uPhrase.HalfphonesInLine.size() - 2; H ++) \t \t { \t \t \t if(h == uPhrase.HalfphonesInLine.size() - 2)我覺得我的代碼很好,但現在我認爲它是不整潔的。你如何處理這種情況? – tmighty
發生這種情況是因爲iMaxGhost
未簽名,但iGhostLen
已簽名。有符號的值將被轉換爲轉換的無符號值(因此-1會變成非常大的值)。
您可以通過將iMaxGhost
更改爲帶符號的整數或通過爲負值設置特殊情況來解決此問題。
我很確定這是因爲你正在比較一個帶符號的int和一個unsigned int。 – Chemistpp
你編譯這個時看到的那些警告?你可能想要考慮他們的意思。而對於獎勵積分,當'iMaxGhost'是'unsigned short'時(僅僅是爲了在扳機上扔扳手)會發生什麼。 – WhozCraig