Τι θα τυπώσει το παρακάτω πρόγραμμα;
#include <stdio.h>
int main() {
printf("%d\n", 2000000000 + 2000000000);
return 0;
}
Όταν το τρέχουμε, τυπώνει:
$ ./overflow
-294967296
Τι συνέβη; Πώς το διορθώνουμε;
Ποιος είναι ο τύπος των δύο σταθερών, άρα και του αθροίσματος, και ποια είναι η
μέγιστη τιμή του; Συγκρίνετε το σωστό άθροισμα με το \(2^{32}\). Για τη διόρθωση,
σκεφτείτε έναν τύπο με μεγαλύτερο εύρος, το suffix των σταθερών και το προσδιοριστικό
της printf που του αντιστοιχεί.
Αριθμός στον οδηγό: Α3.6
(στο κεφάλαιο) ·
Μόνιμο αναγνωριστικό: slides-lec03-overflow ·
Σύνδεσμος: https://progintro.github.io/study/questions/slides/slides-lec03-overflow.html ·
Markdown (GitHub)