Функция printf
принимает тип аргумента, например %d
или %i
для знака 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
На большинстве платформ, долго
и Инт
имеют одинаковый размер (32 бита). Еще, у него есть свой собственный спецификатор формата:
long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned
Для 64 бит, вы'd не хочу длинный
:
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-разрядные значения, я считаю полезным, чтобы распечатать их в hex (как правило, с такими большими, они являются указателями или битовые поля).
unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"
будет печатать:
0x00000000DEADBEEF
Кстати, на "давно" Не'Т означает, что много больше (на основном 64-разрядных). на "внутреннее" это платформа размер по умолчанию тип int обычно 32 бита. на "давно" - это, как правило, одинакового размера. Однако, они имеют разную переносимость семантики на старых платформах (и современных встраиваемых платформ!). на "Длинный" и представляет собой 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
Назад в день, что "внутреннее", было 16 бит. Вы'd не думаю, что это теперь будет 64 бита, но нет, что вызвало бы безумные проблемы переносимости. Конечно, даже это упрощение магии и истории богатых правду. См. Вики:целое
В случае, если вы'вновь глядя в печати неподписанные долго долго, как я, использовать с:
unsigned long long n;
printf("%llu", n);
Для всех остальных комбинаций, я верю, что вы используете стол с в <а href="и http://www.cplusplus.com/reference/clibrary/cstdio/printf/">функции printf руководство</а>, принимая строку, затем столбец "метка" для любого типа вы'вновь пытается напечатать (как я делаю с функции printf(" по%ЛПУ", у, Н)
выше).
Я думаю, чтобы ответить окончательно на этот вопрос потребует зная имя компилятора и используемой версии и платформы (тип процессора, ОС и т. д.) что это компилировать.