как делают меня printf длинное? Разве это не должно работать? %li

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

5
задан wallyk 13 February 2010 в 19:25
поделиться

6 ответов

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

Используйте "% lu" для длинных чисел без знака и "% ld" или "% li" для длинных чисел со знаком.

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

13
ответ дан 18 December 2019 в 07:29
поделиться

Ознакомьтесь с run_simple werkzeug:

http://werkzeug.pocoo.org/documentation/0.5.1/serving.html

Помимо автоматической перезагрузки кода, вы можете использовать use_debugger=True для включения их довольно острого отладчика поверх вашего приложения (который включает консоль в каждой строке traceback).

-121--3153498-

Все варианты, которые я когда-либо использовал, были объяснены в книге hadley's great ggplot2.

-121--907642-

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

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

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

8
ответ дан 18 December 2019 в 07:29
поделиться

Учитывая код:

#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
ответ дан 18 December 2019 в 07:29
поделиться

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

0
ответ дан 18 December 2019 в 07:29
поделиться

Вы можете использовать случай условие для этого http://dev.mysql.com/doc/refman/5.0/en/case-statement.html

-121--1883294-

Я видел этот термин, используемый в контексте Forth, где отсутствие доступа к кадру стека иногда требует чрезмерного использования манипуляций стеком ("thrashing the stack"), чтобы добраться до определенных слов в верхней части стека.

Также, Этот глоссарий определяет его как "Частое расширение стека (переполнение) и сокращение (недолив)". Ясно, что определение нуждается в дальнейшем объяснении. Возможно, кто-то более знакомый с X1 Cray может объяснить.

-121--4817530-

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

0
ответ дан 18 December 2019 в 07:29
поделиться

%ld или %lu в зависимости от того, какая "длина" вам нужна.

0
ответ дан 18 December 2019 в 07:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: