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

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

Εργαστήριο 0, Άσκηση 2 · Δυσκολία ★☆☆ · short-answer · Κεφάλαια: 2

Μεταγλωττίστε και τρέξτε το ακόλουθο πρόγραμμα:

#include <stdio.h>

int main() {
  printf("%d\n", 2000000000 + 2000000000);
  return 0;
}

Συμπεριφέρεται όπως θα περιμένατε; Γιατί / γιατί όχι; Διορθώστε το αν μπορείτε.

2.1 Ειδικές ακολουθίες χαρακτήρων (Προχωρημένο, Προαιρετικό)

Παραπάνω χρησιμοποιήσαμε την ειδική ακολουθία \n για να τυπώσουμε μια νέα γραμμή μετά το μήνυμά μας. Αντίστοιχα μπορούμε να χρησιμοποιήσουμε άλλες ακολουθίες προκειμένου να τυπώσουμε ειδικούς χαρακτήρες ή να δώσουμε συγκεκριμένη μορφοποίηση στο κείμενό μας.

Παράδειγμα 1. Δοκιμάστε να τυπώσετε την ειδική ακολουθία \U0001F525. Τι τυπώνεται στην κονσόλα; Μπορείτε να βρείτε μια εκτενή λίστα με άλλες ειδικές ακολουθίες εδώ ενώ για να μάθετε περισσότερα μπορείτε να διαβάσετε για Unicode χαρακτήρες στην wikipedia.

Παράδειγμα 2. Χρησιμοποιήστε την printf για να τυπώσετε την ακολουθία "Hello \033[1m world \033[0m !". Τι παρατηρείτε; Μπορείτε να φανταστείτε τι σημαίνουν οι ακολουθίες \033[1m και \033[0m; Τι συμβαίνει αν αντικαταστήσετε την ακολουθία \033[1m με την ακολουθία \033[5m; Μπορείτε να μάθετε περισσότερα διαβάζοντας για ANSI Escape codes.

Υπόδειξη

Ποιος είναι ο τύπος των δύο σταθερών και ποια είναι η μεγαλύτερη τιμή που χωράει σε έναν int των 4 bytes; Διαβάστε και τις προειδοποιήσεις του gcc. Για τη διόρθωση, σκεφτείτε έναν ευρύτερο ακέραιο τύπο και ποια προδιαγραφή της printf του αντιστοιχεί.

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