On my machine, where an int is 32 bits, the following code :
int64_t m = (int64_t) 1 << 60;
int64_t n = (int64_t) 2048 * 2048 * 2048;
gives the mathematically expected results of 2^60 and 2^33 even though the standard seems to say that 1 and 2048 should be treaded as "int".
Should I consider that result as luck, or does the C99 standard guarantees that I don't get overflow?