12
Załóżmylong long to 8 bajtów, ale mam przepełnienie całkowite?
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
ale kompilator narzeka:
warning: integer overflow in expression [-Woverflow]
Dlaczego przepełnienia, co mi brakuje?
Cholera, masz rację. Zawsze myśli się o dołączaniu f lub (rzucaniu) pływaków ... ale nigdy nie tęskni :(Doceń to. –
@DervinThunk - łatwo jest zapomnieć o stałych – teppic
Dokładniej, stałe są typu 'int' (" integer "jest bardziej ogólny termin, obejmujący wszystko od 'char' do' long long' i prawdopodobnie więcej) i jeśli zastosujesz 'LL' do najbardziej prawicowego' 1024', nadal możesz uzyskać przepełnienie, biorąc pod uwagę '5 * 1024 * 1024 * 1024LL', '5 * 1024 * 1024' jest nadal oceniane jako' int' - które może legalnie być tak wąskie, jak 16 bitów. Najbardziej niezawodnym rozwiązaniem jest prawdopodobnie napisanie '5LL * 1024LL * 1024LL * 1024LL' - lub '5LL * (1LL << 30)'. –