C ++比古怪更大

时间:2013-10-13 19:44:14

标签: c++ if-statement

我有一个比问题更大的奇怪。

iGhostLen为-1,iMaxGhost为480。 但仍然是行iGhostLen = iMaxGhost;被击中了。

-1是特殊情况还是我可能出错的地方。 我不认为-1大于480。

谢谢。

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

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

2 个答案:

答案 0 :(得分:1)

由于比较有符号和无符号整数,您应该收到编译器警告。将unsigned int更改为int,并阅读一些有关数字表示的内容。

答案 1 :(得分:0)

这是因为iMaxGhost未签名,但iGhostLen已签名。带符号的值将转换为转换的无符号值(因此-1将成为一个非常大的值)。

您可以通过将iMaxGhost更改为有符号整数,或者为负值设置特殊情况来解决此问题。