Неожиданный результат для неявного преобразования типов - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь вызвать неявное преобразование типов между int и unsigned int в некотором коде, который я написал. Компилятор дает неожиданный результат.

В соответствии с правилами неявного преобразования целых чисел со знаком и без знака (одинакового ранга), код должен выдавать большое положительное число в качестве вывода.

unsigned int q = 90;
int w = -1;
printf("q+w=%u\n", q + w);

В качестве выходных данных для этой программы, которые вы можете просмотреть здесь , результат равен 89. Я ожидал бы, что int w будет приведен к типу unsigned int, прежде чем произойдет арифметика, и произвести ожидаемый результат.

1 Ответ

1 голос
/ 11 июня 2019

-1 преобразуется в UINT_MAX (формальное правило для преобразования в unsigneds состоит в том, что вы многократно добавляете или вычитаете максимум + 1 до совпадения результата (6.3.1.3p2) ). UINT_MAX+90 == 89.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...