С учетом кода:
#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
') для значений без знака.