12
long long b = 5*1024*1024*1024; // 5 gigs, small enough for 64 bits
printf ("%lu\n",sizeof(long long)); // prints 8 (bytes) = 64 bits
但是編譯器會抱怨:
warning: integer overflow in expression [-Woverflow]
爲什麼會溢出,我失去了什麼?
darn,你說得對。一個人總是會考慮追加f或者(cast)浮動......但是永遠不會持久::(欣賞它 –
@DervinThunk - 用常量很容易忘記 – teppic
更確切地說,常量的類型爲'int'(「integer」一個更通用的術語,涵蓋從'char'到'long long'的所有內容以及可能更多)。如果將LL'應用於最右邊的'1024',仍可能發生溢出;給定'5 * 1024 * 1024 * 1024LL','5 * 1024 * 1024'仍然被認爲是一個'int' - 它可以合法地縮小到16位。最可靠的解決方案可能是編寫'5LL * 1024LL * 1024LL * 1024LL' - 或'5LL *(1LL << 30)'。 –