C ++, «сравнение всегда верно из-за ограниченного диапазона типов данных» - PullRequest
0 голосов
/ 30 сентября 2019

У меня проблема с этим циклом for: компилятор говорит: «ошибка: сравнение всегда верно из-за ограниченного диапазона типов данных [-Werror = type-limit]» со ссылкой на «for (...)" часть. Я не понимаю почему, так как сравнение не всегда верно.

for(unsigned char i = 7; i >= 0; i--)
{
    if(dec % 2 == 0) binary[i] = '0';
    else binary[i] = '1';
    if(dec/2 <= 0) return binary; else dec /= 2;
}

1 Ответ

3 голосов
/ 30 сентября 2019

Когда i равен 0, i >= 0 будет истинным, и вы примените i--.

Тогда какое значение вы ожидаете принять i? Он не может принимать значение -1, потому что он без знака, поэтому i станет 255.

Но 255 - >=0, поэтому цикл будет продолжен. Навсегда.

Вместо этого рассмотрите возможность использования:

for(int i = 7; i >= 0; i--)
...