Κοινή χρήση τεχνολογίας

Η αρχή υπολογισμού του εύρους που αντιπροσωπεύεται από μεταβλητές τύπου int

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Κατανοήστε

Εισαγάγετε την περιγραφή της εικόνας εδώ
Συνήθως η μεταβλητή τύπου int καταλαμβάνει 4 byte, 1 byte έχει 8 bit και κάθε bit έχει δύο καταστάσεις: 0 και 1, επομένως η μεταβλητή τύπου int μπορεί να αντιπροσωπεύει συνολικά 2^32 καταστάσεις (δηλαδή μπορεί να αντιπροσωπεύει 2^8 τιμή δεδομένων).

2. Γιατί συνήθως το εύρος τιμών του ακέραιου τύπου int είναι -2147483648 ~ 2147483647

Έναρξη στις 07:36
περαιτέρω κατανόηση
        παρακαλώ: Από τα δύο παραπάνω βίντεο, μπορούμε να γνωρίζουμε ότι το εύρος των θετικών ακεραίων που μπορεί να αναπαρασταθεί από τον τύπο int είναι 1 ~ 2 ^ 31 - 1. Εάν συγκρίνουμε αυτή τη λογική με αρνητικούς ακέραιους αριθμούς, τότε το εύρος των ακεραίων που μπορεί να αναπαρασταθεί από τον τύπο int δεν πρέπει να είναι -2^31 + 1 ~ 2^31 -1; Εφόσον δεν μπορεί να ληφθεί η τιμή 2^31, γιατί μπορεί να ληφθεί -2^31;
        απάντηση:Στην επιστήμη των υπολογιστών, η πιο συχνά χρησιμοποιούμενη αναπαράσταση ακέραιου αριθμού είναιαναπαράσταση συμπληρώματος δύο . Αυτή η μέθοδος όχι μόνο λύνει το πρόβλημα της αναπαράστασης θετικών και αρνητικών αριθμών, αλλά απλοποιεί επίσης τις δυαδικές πράξεις πρόσθεσης και αφαίρεσης. Ας ρίξουμε μια ματιά σε αυτήν την αναπαράσταση λεπτομερώς:
        1. Θετικός αριθμός : Η δυαδική αναπαράσταση των θετικών αριθμών είναι ίδια με τους ανυπόγραφους αριθμούς. Για παράδειγμα, η τριψήφια δυαδική αναπαράσταση του 3 είναι 011.
        2. αρνητικός αριθμός : Η αναπαράσταση αρνητικών αριθμών επιτυγχάνεται μέσω του συμπληρώματος θετικών αριθμών. Το συμπλήρωμα των δύο ενός αρνητικού αριθμού υπολογίζεται αντιστρέφοντας τη δυαδική παράσταση της απόλυτης τιμής του αριθμού και προσθέτοντας 1. Για παράδειγμα:
① Άρνηση: Πρώτα αντιστρέψτε τη δυαδική αναπαράσταση του 3, 011, σε 100.
② Προσθέστε 1: Προσθέστε 1 στο 100 για να πάρετε το 101, έτσι η αναπαράσταση του συμπληρώματος των δύο με -3 είναι 101.
         Για μια ακέραια μεταβλητή 32 bit, το υψηλότερο bit της (ονομάζεται επίσης bit πρόσημου) αντιπροσωπεύει το πρόσημο, το 0 αντιπροσωπεύει θετικό και το 1 αντιπροσωπεύει αρνητικό. Τα υπόλοιπα 31 bit χρησιμοποιούνται για την αναπαράσταση αριθμητικών τιμών.Στη συνέχεια, πίσω στο ερώτημα που μόλις τέθηκε:
        1. Θετικό εύρος (συμπεριλαμβανομένου του 0) : Το bit πρόσημου είναι 0 και τα υπόλοιπα 31 bit μπορούν να αντιπροσωπεύουν τιμές από 000…000 (31 0s) έως 011…111 (31 1s). Το αντίστοιχο δεκαδικό εύρος είναι από 0 έως 2^31 - 1.
        2. Αρνητικό εύρος : Το bit πρόσημου είναι 1 και τα υπόλοιπα 31 bit μπορούν να αντιπροσωπεύουν τιμές από 100...000 (31 0s) έως 111...111 (31 1s). Μεταξύ αυτών, ο αριθμός συμπληρώματος των δύο 100...000 (31 μηδενικά) αντιπροσωπεύει -2^31 και η αντίστοιχη δεκαδική τιμή είναι -2^31. Ο αριθμός του συμπληρώματος των δύο 111...111 (31 μονάδες) αντιπροσωπεύει -1 και η αντίστοιχη δεκαδική τιμή είναι -1.
         Θετικό εύρος αριθμών: 1 ~ 2^31 - 1 αρνητικό εύρος αριθμών: -1 ~ -2^31, ο συνολικός αριθμός είναι ακόμα 2^32 διαφορετικές καταστάσεις. Επομένως, συνήθως το εύρος τιμών του ακέραιου τύπου int είναι -2147483648 ~ 2147483647 (δηλαδή -2^31 ~ 2^31 - 1)

3. Πόσα byte καταλαμβάνει ο τύπος int;

Πόσα byte καταλαμβάνει το 64-bit int Η διαφορά μεταξύ ακέραιων τύπων int, long και long long;
Πόσα byte καταλαμβάνει το 64-bit int [Συνέντευξη] Πόσα byte καταλαμβάνει το int;
Η διαφορά μεταξύ μηχανών 32-bit και 64-bit και ο αριθμός των byte που καταλαμβάνονται από βασικούς τύπους δεδομένων
Γλώσσα C ακέραιος τύπος (συμπεριλαμβανομένου του εύρους τιμών και του μήκους)
Πόσα byte καταλαμβάνει ο τύπος int;
Μέγεθος δεδομένων τύπου int και τύπου δείκτη σε διαφορετικές πλατφόρμες
Πρόβλημα Java sizeof().
Οι μεταβλητές τύπου int στην python μπορούν να αποθηκεύσουν ακέραιους αριθμούς οποιουδήποτε μεγέθους

Συνοψίζω:

  1. Το μέγεθος του τύπου δεδομένων των C και C++ επηρεάζεται από το πρότυπο μεταγλώττισης, τον μεταγλωττιστή, το bit του λειτουργικού συστήματος κ.λπ.
  2. Το μέγεθος του τύπου δεδομένων της Java και της Python καθορίζεται από την προδιαγραφή γλώσσας ή την υλοποίηση του διερμηνέα και δεν επηρεάζεται από παράγοντες όπως ο μεταγλωττιστής και το bit του λειτουργικού συστήματος.
  3. Ο κύριος λόγος για αυτήν τη διαφορά σχεδιασμού είναι ότι η C και η C++ είναι γλώσσες προγραμματισμού συστημάτων που συνήθως πρέπει να αλληλεπιδρούν απευθείας με το υλικό, επομένως το μέγεθος των τύπων δεδομένων θα ποικίλλει ανάλογα με το υποκείμενο περιβάλλον, ενώ η Java και η Python είναι υψηλού επιπέδου. γλώσσες προγραμματισμού επιπέδου με υψηλότερο επίπεδο αφαίρεσης Ο στόχος σχεδιασμού είναι η συνοχή μεταξύ πλατφορμών.

4. Συστήστε

Συνιστάται ξανά
Μέρος τρίτο: Η προέλευση του προβλήματος