printf
Функция принимает тип параметра, например, %d
или %i
для signed int
. Тем не менее, я не вижу ничего для long
ценности.
c
printf
long-integer
Томас Оуэнс
источник
источник
Ответы:
Поместите
l
(строчная буква L) непосредственно перед спецификатором.источник
printf("%ld", ULONG_MAX)
выводит значение как -1. Должно бытьprintf("%lu", ULONG_MAX)
для unsigned long, как описано @Blorgbeard ниже.%ld
, чтобы быть более гармоничным с вопросом OP.%l
срабатываетwarning: unknown conversion type character 0x20 in format [-Wformat]
Я думаю, что вы имеете в виду:
или
источник
На большинстве платформ,
long
иint
имеют тот же размер (32 бит). Тем не менее, он имеет свой собственный спецификатор формата:Для 64 битов вы бы хотели
long long
:Да, и, конечно, в Windows все по-другому:
Часто, когда я печатаю 64-битные значения, бывает полезно напечатать их в шестнадцатеричном формате (обычно с такими большими числами, они являются указателями или битовыми полями).
напечатает:
Кстати, «long» уже не так много значит (в основном x64). "int" - это int размер платформы по умолчанию, обычно 32 бита. «длинный» обычно одинакового размера. Тем не менее, они имеют различную семантику переносимости на старых платформах (и современных встроенных платформах!). «long long» - это 64-битное число, которое обычно используют люди, если они действительно не знают, что делают, редактируя кусок переносимого кода на x-платформе. Даже тогда они, вероятно, использовали бы вместо этого макрос для захвата семантического значения типа (например, uint64_t).
В свое время «int» был 16 бит. Можно подумать, что теперь это будет 64 бита, но нет, это вызвало бы безумные проблемы с переносимостью. Конечно, даже это упрощение тайной и богатой истории правды. Смотрите вики: целое число
источник
long
размер 32», все еще верно. Например, я на Oracle Linux x86_64 / amd64, и с составляет 8 байт.nvcc
long
Это зависит, если вы имеете в виду unsigned long, то форматирующий символ
"%lu"
. Если вы имеете в виду подписанный длинный символ форматирования"%ld"
.источник
%ld
см.printf
ссылку на cplusplus.comисточник
Если вы хотите печатать,
unsigned long long
как я, используйте:Для всех других комбинаций, я полагаю, вы используете таблицу из руководства printf , взяв строку, а затем метку столбца для любого типа, который вы пытаетесь напечатать (как я делал
printf("%llu", n)
выше).источник
Я думаю, что для окончательного ответа на этот вопрос потребуется знать имя и версию компилятора, который вы используете, и платформу (тип процессора, ОС и т. Д.), Для которой он компилируется.
источник