Несколько причин, по которым на языке C выводится отрицательное число:
- Для чисел со знаком (int и т. п.) первый бит в регистре процессора интерпретируется как знак минус. 1 Поэтому, когда в результате сложения в регистре первый бит устанавливается в 1, стандартная библиотека интерпретирует результат как отрицательное число. 1
- Использование спецификатора формата %d. 2 Он указывает printf обрабатывать аргумент как целое число со знаком. 2 Вместо него для беззнаковых чисел следует использовать %u. 2
- Представление чисел в памяти. 4 Функции scanf и printf сами представляют число, и по команде %d берут байты из памяти и представляют число со знаком. 4
Чтобы напечатать число со знаком, можно принудительно задать это через символ плюса (+) в спецификаторе формата. 3