как мне печатать долго? Разве это не должно работать? % Li - PullRequest
4 голосов
/ 13 февраля 2010

Я прочитал документацию и там говорится, что long это% li, но распечатка возвращается как -2147024891. Что дает?

Ответы [ 6 ]

12 голосов
/ 13 февраля 2010

Вы даже не указали, какой номер вы хотите напечатать, но, думаю, вы наткнулись на разницу между печатью с подписью и без подписи.

Используйте "% lu" для unsigned long номеров и "% ld" или "% li" для signed long номеров.

MSDN содержит хорошую документацию по спецификаторам printf. Для 64-битных значений (например, long long) вы должны использовать макросы в «inttypes.h».

7 голосов
/ 13 февраля 2010

Вы пытаетесь распечатать HRESULT, код ошибки «доступ запрещен». Это лучше всего отформатировать в шестнадцатеричном формате, по крайней мере, чтобы его можно было легко узнать программисту.

printf("0x%08lx", hr);

Теперь вы мгновенно узнаете код объекта 7 (Windows API) и код ошибки 5 (доступ запрещен).

0 голосов
/ 14 февраля 2010

Попробуйте% llu, а также для присвоения значения длинной переменной. Не забудьте, что в конце числа необходимо добавить «LL», например, a = 999999999LL

0 голосов
/ 14 февраля 2010

С учетом кода:

#include <stdio.h>
int main(void)
{
    long l1 = +2147024891;
    long l2 = -2147024891;
    printf("%+11li = 0x%lx\n", l1, l1);
    printf("%+11li = 0x%lx\n", l2, l2);
    return(0);
}

Вывод, скомпилированный в 32-разрядном режиме (в MacOS 10.6.2): ​​

+2147024891 = 0x7ff8fffb
-2147024891 = 0x80070005

Вывод, скомпилированный в 64-битном режиме:

 2147024891 = 0x7ff8fffb
-2147024891 = 0xffffffff80070005

Поскольку вы не показываете нам, что написали и почему ожидали чего-то другого, трудно сказать, что может быть не так. Однако, хотя это относительно необычно, преобразование '%li' было в C89 и C99, так что это должно быть правильно. Более обычными спецификаторами преобразования являются '%ld' (синоним '%li') и '%lu' (и '%lo' и '%lx') для значений без знака.

0 голосов
/ 13 февраля 2010

% ld или% lu в зависимости от нужного вам «long».

0 голосов
/ 13 февраля 2010

Печатаете ли вы неподписанное значение как подписанное?С дополнением до двух значение со значащим битом будет напечатано как отрицательноеПопробуйте% u для неподписанных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...