Πίνακας περιεχομένων:
- Οι αριθμοί που εξοικειώνεστε με το χρόνο που θα μπορούσατε να υπολογίζετε πρώτα στα δάχτυλά σας είναι γνωστοί ως
- 123
- 5
Βίντεο: Week 0 2024
Οι μεταβλητές C ++ αποθηκεύονται εσωτερικά ως λεγόμενοι δυαδικοί αριθμοί. Οι δυαδικοί αριθμοί αποθηκεύονται ως ακολουθία τιμών 1 και 0 γνωστών ως bits. Τις περισσότερες φορές, δεν χρειάζεται να ασχοληθείτε με τα συγκεκριμένα bits που χρησιμοποιείτε για να αντιπροσωπεύετε τους αριθμούς. Μερικές φορές, ωστόσο, είναι πρακτικό και βολικό να τικνάρουμε με αριθμούς σε επίπεδο bit - έτσι το C ++ παρέχει ένα σύνολο χειριστών για το σκοπό αυτό.
Οι λεγόμενοι bitwise λογικοί τελεστές λειτουργούν στα επιχειρήματά τους σε επίπεδο bit. Για να κατανοήσουν πώς λειτουργούν, πρώτα εξετάστε πώς οι υπολογιστές αποθηκεύουν μεταβλητές.
Οι αριθμοί που εξοικειώνεστε με το χρόνο που θα μπορούσατε να υπολογίζετε πρώτα στα δάχτυλά σας είναι γνωστοί ως
δεκαδικοί αριθμοί επειδή βασίζονται στον αριθμό 10. Γενικά, ο προγραμματιστής εκφράζει μεταβλητές C ++ ως δεκαδικούς αριθμούς. Έτσι θα μπορούσατε να καθορίσετε την τιμή του var ως (ας πούμε) 123, αλλά εξετάστε τις συνέπειες. Ένας αριθμός όπως ο 123 αναφέρεται σε 1 * 100 + 2 * 10 + 3 * 1. Όλοι αυτοί οι αριθμοί βάσης - 100, 10 και 1 - είναι εξουσίες 10.
123 = 1 * 100 + 2 * 10 + 3 * 1
Εκφράζεται σε ελαφρώς διαφορετικό (αλλά ισοδύναμο) 2
+ 2 * 10
1 + 3 * 10 0 Άλλα συστήματα αριθμών Λοιπόν, καλά, χρησιμοποιώντας 10 ως βάση (ή
βάση ) του συστήματος μέτρησης μας πιθανότατα προέρχεται από τα 10 ανθρώπινα δάχτυλα, τα αρχικά εργαλεία μέτρησης. Μια εναλλακτική βάση για ένα σύστημα καταμέτρησης θα μπορούσε εύκολα να είναι 20.
123
10 = 1 * 8 2
+ 3 * 80 = 173 8
Τα μικρά 10 και 8 εδώ αναφέρονται στο σύστημα αριθμοδότησης, 10 για δεκαδικό (βάση 10) και 8 για οκταδικό (βάση 8). Ένα σύστημα καταμέτρησης μπορεί να χρησιμοποιεί οποιαδήποτε θετική βάση. Το σύστημα δυαδικών αριθμών Οι υπολογιστές έχουν ουσιαστικά δύο δάχτυλα. Οι υπολογιστές προτιμούν την καταμέτρηση χρησιμοποιώντας τη βάση 2. Ο αριθμός 123 10 θα εκφράζεται με αυτόν τον τρόπο: 123 10 = 0 * 2 7
+ 1 * 2
5
+ 1 * 2 4 + 1 * 2
1 + 1 * 2 0 123 10 = 0 * 128 + 1 * 64 + 1 * 32 + 1 * 16 + 1 * 8 + 0 * 4 + 1 * 2 + 1 * 1 = 01111011 2 Η σύμβαση υπολογιστών εκφράζει δυαδικούς αριθμούς χρησιμοποιώντας 4, 8, 16, 32 ή ακόμα και 64 δυαδικά ψηφία.Αυτό οφείλεται επίσης στον τρόπο με τον οποίο κατασκευάζονται εσωτερικά υπολογιστές. Επειδή ο όρος ψηφίο αναφέρεται σε πολλαπλάσιο των 10, ένα δυαδικό ψηφίο ονομάζεται bit (συντομογραφία >). Ένα byte αποτελείται από 8 bits. (Η κλήση ενός δυαδικού ψηφίου byte-it δεν φαινόταν καλή ιδέα.) Η μνήμη συνήθως μετράται σε bytes (όπως τα ρολά μετριούνται σε μονάδες των δωδεκάδων του αρτοποιού). Με μια τόσο μικρή βάση, πρέπει να χρησιμοποιήσετε αριθμό μεγάλου
για να εκφράσετε αριθμούς. Οι άνθρωποι δεν θέλουν την ταλαιπωρία να χρησιμοποιήσουν μια έκφραση όπως το 011110112 για να εκφράσουν μια τέτοια κοσμική αξία όπως 123
10 . Οι προγραμματιστές προτιμούν να εκφράζουν αριθμούς χρησιμοποιώντας έναν ζυγό αριθμό bits. Το οκταδικό σύστημα - το οποίο βασίζεται σε 3 bits - ήταν το προεπιλεγμένο δυαδικό σύστημα στις πρώτες ημέρες του C. Βλέπουμε ένα αποκορύφωμα ακόμα και σήμερα - μια σταθερά που αρχίζει με ένα 0 θεωρείται ότι είναι οκταδικό στην C ++. Έτσι, η γραμμή: cout << "0173 =" << 0173 << endl; παράγει την ακόλουθη έξοδο: 0173 = 123 Εντούτοις, το οκτάτο έχει σχεδόν αντικατασταθεί από το σύστημα δεκαεξαδικό , το οποίο βασίζεται σε ψηφία 4 bit. Το δεκαεξαδικό χρησιμοποιεί τα ίδια ψηφία για τους αριθμούς 0 έως 9. Για τα ψηφία μεταξύ 9 και 16, το δεκαεξαδικό χρησιμοποιεί τα πρώτα έξι γράμματα του αλφαβήτου: Α για 10, Β για 11 και ούτω καθεξής. Έτσι, 123 10 γίνεται 7Β 16, όπως παρακάτω: 123 = 7 * 16 1 + B = 7B
16
Οι προγραμματιστές προτιμούν να εκφράζουν δεκαεξαδικούς αριθμούς σε πολλαπλάσια των δεκαεξαδικών ψηφίων ακόμα και όταν το αρχικό ψηφίο σε κάθε περίπτωση είναι 0.
Τέλος, ποιος θέλει να εκφράσει έναν δεκαεξαδικό αριθμό όπως 7Β
16
χρησιμοποιώντας έναν δείκτη; Τα τερματικά δεν υποστηρίζουν ακόμη και δείκτες. Ακόμη και σε έναν επεξεργαστή κειμένου, είναι ένα drag για να αλλάξετε τις γραμματοσειρές από και προς την κατάσταση των υποδειγμάτων μόνο για να πληκτρολογήσετε δύο χίλια ψηφία.
Επομένως, οι προγραμματιστές (όχι ανόητοι, αυτοί) χρησιμοποιούν την αρχή της ένα δεκαεξαδικό αριθμό με ένα 0x. Έτσι, το 7Β γίνεται 0x7B. Χρησιμοποιώντας αυτήν τη σύμβαση, ο δεκαεξαδικός αριθμός 0x7B είναι ίσος με 123 δεκαδικό, ενώ 0x123 δεκαεξαδικό είναι ίσο με 291 δεκαδικό. Το απόσπασμα κώδικα cout << "0x7B =" << 0x7B << endl; cout << "0x123 =" << 0x123 << endl; παράγει την ακόλουθη έξοδο: 0x7B = 123 0x123 = 291 Μπορείτε να χρησιμοποιήσετε όλους τους μαθηματικούς χειριστές στους δεκαεξαδικούς αριθμούς με τον ίδιο τρόπο που θα τους εφαρμόζατε σε δεκαδικούς αριθμούς.
Αν θέλετε πραγματικά, μπορείτε να γράψετε δυαδικούς αριθμούς στο C ++ '14 χρησιμοποιώντας το πρόθεμα '0b'. Έτσι, το 123 γίνεται 0b01111011.