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

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

Διάλεξη 2: Μνήμη και Μεταβλητές, διαφάνεια 26 · Δυσκολία ★★☆ · debug · Κεφάλαια: 2

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

#include <stdio.h>

int main() {
  printf("%d\n", 2000000000 + 2000000000);
  return 0;
}
$ ./overflow
-294967296

Τι συνέβη; Πώς το διορθώνουμε;

Υπόδειξη

Ποιος είναι ο τύπος των δύο σταθερών, και ποια η μεγαλύτερη τιμή που χωράει σε αυτόν; Συγκρίνετε το \(4.000.000.000\) με το \(2^{32}\). Για τη διόρθωση, χρειάζεστε έναν τύπο με περισσότερα bits, τόσο για τις σταθερές όσο και στο προσδιοριστικό της printf.

Αριθμός στον οδηγό: Α2.8 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: slides-lec02-overflow · Σύνδεσμος: https://progintro.github.io/study/questions/slides/slides-lec02-overflow.html · Markdown (GitHub)