Функция printf
принимает тип аргумента, например %d
или %i
для a signed int
. Однако я ничего не вижу для значения long
.
Каков аргумент для printf, который форматирует длинные?
Ответ 1
Поместите символ l
(нижняя буква L) непосредственно перед спецификатором.
unsigned long n;
long m;
printf("%lu %ld", n, m);
Ответ 2
Думаю, вы имеете в виду:
unsigned long n;
printf("%lu", n); // unsigned long
или
long n;
printf("%ld", n); // signed long
Ответ 3
На большинстве платформ long
и int
имеют одинаковый размер (32 бита). Тем не менее, у него есть свой собственный спецификатор формата:
long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned
Для 64 бит вам понадобится long long
:
long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned
О, и, конечно, он отличается от Windows:
printf("%l64d", n); // signed
printf("%l64u", un); // unsigned
Часто, когда я печатаю 64-битные значения, мне удобно печатать их в шестнадцатеричном формате (обычно с большими числами, это указатели или битовые поля).
unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"
напечатает:
0x00000000DEADBEEF
Btw, "long" больше не означает этого (в основном х64). "int" - это стандартный размер платформы по умолчанию, обычно 32 бит. "long" обычно имеет одинаковый размер. Тем не менее, они имеют другую семантику переносимости на старых платформах (и современные встроенные платформы!). "long long" - это 64-битное число и обычно то, что люди хотели использовать, если они действительно не знали, что они делают, редактируя часть портативного кода x-платформы. Даже тогда они, вероятно, использовали бы макрос для захвата семантического значения типа (например, uint64_t).
char c; // 8 bits
short s; // 16 bits
int i; // 32 bits (on modern platforms)
long l; // 32 bits
long long ll; // 64 bits
В тот же день "int" был 16 бит. Вы думаете, что теперь это будет 64 бит, но нет, это вызвало бы безумные проблемы с переносимостью. Конечно, даже это упрощение тайной и богатой историей правды. См. wiki: Integer
Ответ 4
Это зависит, если вы ссылаетесь на unsigned long, символ форматирования "%lu"
. Если вы ссылаетесь на подписанный длинный символ форматирования "%ld"
.
Ответ 5
%ld
см. printf
ссылка на cplusplus.com
Ответ 6
Если вы хотите напечатать unsigned long long
, как я, используйте:
unsigned long long n;
printf("%llu", n);
Для всех других комбинаций, я считаю, вы используете таблицу из руководство по печати, взяв строку, затем метку столбца для любого типа, (как и в случае с printf("%llu", n)
выше).
Ответ 7
Я думаю, что для окончательного ответа на этот вопрос потребуется знание имени и версии компилятора, которые вы используете, и платформы (тип CPU, ОС и т.д.), которые она компилирует.