12
Supponiamolong long è 8 byte, ma ottengo un overflow intero?
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
ma il compilatore si lamenta:
warning: integer overflow in expression [-Woverflow]
Perché è troppo pieno, cosa mi manca?
maledizione, hai ragione. Si pensa sempre di aggiungere f o (lanciare) float ... ma non si allunga mai :(Apprezzalo –
@DervinThunk - è facile dimenticare con costanti – teppic
Più precisamente, le costanti sono di tipo 'int' (" intero "è un termine più generale, che copre ogni cosa da 'char' a' long long' e possibilmente di più) E se applichi 'LL' alla destra' 1024', potresti comunque ottenere un overflow, dato '5 * 1024 * 1024 * 1024LL', '5 * 1024 * 1024' viene ancora valutato come' int' - che può essere legalmente stretto come 16 bit. La soluzione più affidabile è probabilmente scrivere '5LL * 1024LL * 1024LL * 1024LL' - o '5LL * (1LL << 30)'. –