Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α3.6 · Υπερχείλιση ακεραίων

Διάλεξη 3: Συναρτήσεις, διαφάνεια 8 · Δυσκολία ★★☆ · trace · Κεφάλαια: 3

Τι θα τυπώσει το παρακάτω πρόγραμμα;

#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)