This is not odd to me. On 32 bits archs, int/long are 32 and long long is 64. I just tested it again on the esp. It has to be noted that printf(%) deal with int(%d %i) long(%ld %li) or long long (%lld %lli %Ld %Li) (man printf is not clear, speaking of double for L but also saying it's a synonym of ll which applies to integers). It does not known int_t types. This is why these PRI* macro were introduced, and yes at least PRIu64 prints "lu" too here.