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.