On most platforms, long and int are the same size (32 bits). Still, it does have its own format specifier:
***
long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned
***
For 64 bits, you'd want a long long:
***
long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned
***
Oh, and of course, it's different in Windows:
***
printf("%l64d", n); // signed
printf("%l64u", un); // unsigned
***