Почему делает вывод этого изменения программы в 130?

У меня есть следующий код, и мне кажется, что это должно всегда вводить истинную часть if оператор, но, вне 120, это, кажется, начинает выполняться else пункт. Почему это происходит?

char x;
for (i=0;i<256;i+=10) {
    x=i;
    if (x==i)
        printf("%d true\n",i);
    else 
        printf("%d false\n",i);
}

Вывод:

0 true
10 true
: all numbers from 20 to 100 are true
110 true
120 true
130 false
140 false
: all numbers from 150 to 230 are false
240 false
250 false
6
задан Mark Byers 27 April 2010 в 15:03
поделиться

2 ответа

Ваш компилятор, вероятно, по умолчанию использует знаковый символ, когда вы используете ключевое слово char. Диапазон подписанного char обычно составляет от -128 до 127, тогда как диапазон int намного больше. Более эзотерическое оборудование, выходящее за рамки типичного настольного ПК, может использовать другие значения.

12
ответ дан 8 December 2019 в 04:29
поделиться

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

Символ переполняется, когда достигает 130 (становится 130 - 256), но целое число не переполняется. 130 - 256! = 130.

Простое изменение исправляет это так, что результат всегда истинный - просто добавьте беззнаковый в первую строку:

unsigned char x;
for (int i=0;i<256;i+=10)
{
    x=i;
    if (x==i)
        printf("%d true\n",i);
    else 
        printf("%d false\n",i);
}
13
ответ дан 8 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: