У меня странная проблема.
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
и немного прочитайте о представлениях чисел.
Это происходит потому, что iMaxGhost
без знака, но iGhostLen
подписан. Подписанное значение будет преобразовано в значение без знака для преобразования (поэтому -1 станет чрезвычайно большим значением).
Вы можете исправить это, изменив iMaxGhost
как целое число со iMaxGhost
, или получив специальный случай для отрицательных значений.
unsigned int
содержит больше положительных значений, чемint
аint
больше отрицательных значений. Он должен был бы использовать больший тип, и резервирование самого большого типа только для сравнений было бы немного глупо, поэтому был сделан выбор сделать подписанное значение беззнаковым.