C ++ Больше, чем странность

0

У меня странная проблема.

iGhostLen - -1, а iMaxGhost - 480. Но все же строка iGhostLen = iMaxGhost; попал.

Является ли -1 особым случаем или где я мог ошибиться. Я не думаю, что -1 больше 480.

Спасибо.

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

if (iGhostLen > iMaxGhost)
{
    iGhostLen=iMaxGhost;
}
Теги:
if-statement

2 ответа

1
Лучший ответ

Вы должны получить предупреждение о компиляторе из-за сравнения целых чисел с подписью и без знака. Измените unsigned int на int и немного прочитайте о представлениях чисел.

  • 0
    Спасибо. Но почему оператор ">" не может сравнивать unsigned int и sign int?
  • 1
    @tmighty, unsigned int содержит больше положительных значений, чем int а int больше отрицательных значений. Он должен был бы использовать больший тип, и резервирование самого большого типа только для сравнений было бы немного глупо, поэтому был сделан выбор сделать подписанное значение беззнаковым.
Показать ещё 3 комментария
0

Это происходит потому, что iMaxGhost без знака, но iGhostLen подписан. Подписанное значение будет преобразовано в значение без знака для преобразования (поэтому -1 станет чрезвычайно большим значением).

Вы можете исправить это, изменив iMaxGhost как целое число со iMaxGhost, или получив специальный случай для отрицательных значений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню