c почему выводится отрицательное число?

Я ожидал, что это напечатает очень большое число и то же число -1, но он просто печатает -1 и -2, почему это?

fprintf(stderr, "%dn", 0xffffffff);
fprintf(stderr, "%dn", 0xfffffffe);

4 ответов


на %d format-целое число со знаком (десятичное число). Целые числа сохраняются с помощью два!--5-->, что означает, что бит высокого порядка (8000 0000) указывает, в некотором роде, знак значения.

обратный отсчет от 3, значения:

0000 0003 = 3
0000 0002 = 2
0000 0001 = 1
0000 0000 = 0
FFFF FFFF = -1
FFFF FFFE = -2

etc.

Если вы хотите, чтобы FFFF ffff отображалось как большое положительное число, используйте %u формате (без знака).


аргумент "%d " печатает входные данные как целое число со знаком. В результате вы обнаружили представление дополнения two, вместо этого рассмотрим "%u".


значения, которые вы упоминаете, являются дополняющим представлением двух -1 и -2

посмотреть дополнение


Первый БИТ целого числа со знаком-это знак, поэтому наибольшее число, которое может быть сохранено, - 0xEFFFFFFF.