Каков аргумент в пользу printf, который форматирует long?
-
09-06-2019 - |
Вопрос
Тот Самый printf
функция принимает тип аргумента, например %d
или %i
для signed int
.Тем не менее, я не вижу ничего для long
ценность.
Решение
Поставьте l
(строчная буква L) непосредственно перед спецификатором. Р>
unsigned long n;
long m;
printf("%lu %ld", n, m);
Другие советы
Я думаю, ты имеешь в виду:
unsigned long n;
printf("%lu", n); // unsigned long
или
long n;
printf("%ld", n); // signed long
На большинстве платформ 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
Между прочим, "длинный" уже не так много значит (на мейнстриме x64). & Quot; INT & Quot; размер платформы по умолчанию, обычно 32 бита. & Quot; длинные & Quot; обычно одного размера. Тем не менее, они имеют различную семантику переносимости на старых платформах (и современных встроенных платформах!). "длинный длинный" это 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 бита, но нет, это вызвало бы безумные проблемы с переносимостью. Конечно, даже это упрощение тайной и богатой истории правды. Смотрите вики: целое число
Зависит от того, ссылаетесь ли вы на неподписанный длинный символ форматирования: "% lu "
. Если вы имеете в виду длинную подпись, то форматирующим символом является "% ld "
.
% ld
см. printf код> ссылка на cplusplus.com
Если вы хотите напечатать long unsigned long
, как я, используйте:
unsigned long long n;
printf("%llu", n);
Я полагаю, что для всех других комбинаций вы используете таблицу из руководства printf , беря строку, затем метку столбца для любого типа, который вы пытаетесь напечатать (как я это делал с printf ("% llu " ;, n)
выше).
Я думаю, что для окончательного ответа на этот вопрос потребуется знать имя и версию компилятора, который вы используете, и платформу (тип процессора, ОС и т. д.), для которой он компилируется.