Αριθμομηχανή προγραμματιστή & δυαδική αριθμομηχανή

Παράσταση μιας έκφρασης με δεκαεξαδικά 0x, δυαδικά 0b και οκταδικά 0o literal, τους δυαδικούς τελεστές & | ^ ~, ολισθήσεις << >> >>>, περιστροφές και απλή αριθμητική — το αποτέλεσμα ενημερώνεται ζωντανά ως δεκαδικό, δεκαεξαδικό, οκταδικό και δυαδικό σε μέγεθος λέξης 8, 16, 32 ή 64 bit, με ή χωρίς πρόσημο. Παρακάτω υπάρχουν ένα κλικαριστό πλέγμα bit, ένας πίνακας δυαδικών πράξεων δύο τελεστέων (AND / OR / XOR / NAND / NOR / NOT / ολισθήσεις / ROL / ROR) και η ορισμός / εκκαθάριση / εναλλαγή μεμονωμένου bit. Για απλή μετατροπή βάσεων χωρίς λογική bit βλ. τον Μετατροπέα μαθηματικών· για στατιστικά τη Αριθμομηχανή στατιστικής.
Μέγεθος λέξης   Προβολή   Τελεστές: & | ^ ~ << >> >>> + - * / % ( ) — μόνο ακέραια αριθμητική, τα αποτελέσματα περιτυλίσσονται στο μέγεθος λέξης.
DEC
HEX
OCT
BIN
Τα bit εμφανίζονται από το πιο σημαντικό προς το λιγότερο· τα σκιασμένα κελιά βρίσκονται εκτός του τρέχοντος μεγέθους λέξης.
δείκτης bit (0 = λιγότερο σημαντικό)
A =    B =  Τα A και B δέχονται πλήρεις εκφράσεις (π.χ. 1 << 12).
Ο πίνακας αποτελεσμάτων εμφανίζεται μόλις αναλυθούν και τα δύο A και B. Οι ολισθήσεις και οι περιστροφές παίρνουν το πλήθος από το B.
Δοκιμή παραδείγματος:
Πώς συμπεριφέρονται οι ολισθήσεις: το << περιορίζει ξανά στο μέγεθος της λέξης (τα bit που ξεπερνούν την κορυφή χάνονται). Το >>> είναι πάντα λογική (χωρίς πρόσημο) ολίσθηση. Το >> ακολουθεί την επιλογή Προβολής: αριθμητική στη λειτουργία με πρόσημο, λογική στη λειτουργία χωρίς πρόσημο. Απόρρητο: όλη η αριθμομηχανή εκτελείται σε αυτή την καρτέλα — χωρίς διακομιστή, χωρίς αποθήκευση.

Τι είναι η αριθμομηχανή προγραμματιστή;

Μια αριθμομηχανή προγραμματιστή κάνει αριθμητική όπως την αποθηκεύει ο υπολογιστής: σε λέξεις σταθερού πλάτους bit. Αντί για μια ατέρμονη γραμμή αριθμών, μια λέξη 8 bit είναι κύκλος 256 τιμών, μια λέξη 32 bit κύκλος 4 294 967 296. Κάθε αποτέλεσμα επιστρέφει σε αυτόν τον κύκλο, και τα ίδια bit μπορούν να διαβαστούν ως χωρίς πρόσημο μέτρημα (0 … 255) ή ως συμπλήρωμα ως προς δύο με πρόσημο (-128 … 127). Οι τέσσερις γραμμές βάσεων παραπάνω είναι τα ίδια bit σε τέσσερις μορφές — με αλλαγή της μίας οι υπόλοιπες ακολουθούν.

Γιατί οι προγραμματιστές ζουν στο δεκαεξαδικό

Ένα δεκαεξαδικό ψηφίο είναι ακριβώς τέσσερα bit, οπότε ένα byte αντιστοιχεί πάντα σε δύο δεκαεξαδικά ψηφία, μια λέξη 32 bit πάντα σε οκτώ. Το δεκαεξαδικό είναι δυαδικό με τα μηδενικά ομαδοποιημένα ξανά για ανθρώπινη ανάγνωση:

ΔυαδικόΔεκαεξαδικόΔεκαδικό
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (ή -128 με πρόσημο)

Συμπλήρωμα ως προς δύο σε μία παράγραφο

Για να διαβαστεί μια λέξη ως προσημασμένη, εξετάζεται το επάνω bit. Αν είναι 0, η τιμή είναι απλώς το μέτρημα χωρίς πρόσημο. Αν είναι 1, αφαιρείται το μέγεθος του κύκλου: το 8 bit 0xFF είναι 255 − 256 = −1. Αυτό είναι όλο το τέχνασμα — το -x και το 0 - x παράγουν πανομοιότυπα bit, γι' αυτό το ίδιο κύκλωμα προσθέτη δουλεύει και για τα δύο. Η αλλαγή προσήμου είναι «αντιστροφή κάθε bit, πρόσθεση 1»: NOT(0x01) = 0xFE, +1 = 0xFF = −1.

Οι τελεστές ολίσθησης με μια ματιά

ΤελεστήςΌνομαΠαράδειγμα 8 bit (a = 0xF0)
a << 1αριστερή ολίσθηση0xE0 — το επάνω bit χάνεται, μηδέν μπαίνει από κάτω
a >> 1 (χωρίς πρόσημο)λογική δεξιά ολίσθηση0x78 — τα μηδενικά μπαίνουν από την κορυφή
a >> 1 (με πρόσημο, a = −16)αριθμητική δεξιά ολίσθηση0xF8 = −8 — αντιγράφεται το bit προσήμου
a >>> 1πάντα λογική0x78 ανεξάρτητα από την επιλογή Προβολής
rol(a, 1)αριστερή περιστροφή0xE1 — το επάνω bit που χάθηκε ξαναμπαίνει από κάτω

Συνηθισμένα λάθη που βοηθά αυτή η σελίδα να αποφεύγονται

Αριθμητική έναντι λογικής ολίσθησης: η αντιγραφή του bit προσήμου (αριθμητική) και η συμπλήρωση με μηδενικά (λογική) διαφέρουν όποτε είναι ενεργό το επάνω bit· με αλλαγή της επιλογής Προβολής και παρατήρηση του 0xF0 >> 1 να αλλάζει από 0x78 σε 0xF8.
Η έκπληξη των 53 bit: ο συνηθισμένος τύπος Number της JavaScript είναι float 64 bit με μόνο 53 ασφαλή ακέραια bit, οπότε το 0xFFFFFFFFFFFFFFFF δεν μπορεί να αναπαρασταθεί ακριβώς — αυτή η σελίδα χρησιμοποιεί εσωτερικά ακριβή ακέραια αριθμητική 64 bit, οπότε κάθε δεκαεξαδικό ψηφίο που εμφανίζεται είναι αξιόπιστο.
Παγίδες κινητής υποδιαστολής: το 0.1 + 0.2 δίνει περίφημα 0.30000000000000004 σε κινητή υποδιαστολή· αυτή η αριθμομηχανή είναι μόνο ακεραία εκ σχεδιασμού — η διαίρεση στρογγυλοποιεί προς το μηδέν, ακριβώς όπως η / της C σε ακεραίους.
Αρχικά μηδενικά: στην παλαιά C ένα literal όπως το 052 σήμαινε οκταδικό. Εδώ το δεκαδικό είναι απλά ψηφία και το οκταδικό απαιτεί πρόθεμα 0o, οπότε τίποτα δεν είναι διφορούμενο.

Συχνές ερωτήσεις

Ποιος είναι ο μεγαλύτερος αριθμός; — 64 bit χωρίς πρόσημο: 18 446 744 073 709 551 615 (0xFFFFFFFFFFFFFFFF)· με πρόσημο: ±9 223 372 036 854 775 808.
Γιατί το 1 << 8 έγινε 0; — το μέγεθος λέξης είναι 8 bit· το bit 8 δεν υπάρχει, και η μάσκα το αποβάλλει. Με αλλαγή σε 16/32/64 bit για να διατηρηθεί.
Τι κάνει το ~; — δυαδική NOT: κάθε bit αντιστρέφεται μέσα στο τρέχον μέγεθος λέξης, οπότε το ~0 είναι όλα άσοι (255 / 65535 / −1 …).
Υπάρχει κινητή υποδιαστολή; — όχι, μόνο ακέραιοι· για float, τριγωνομετρία και συναρτήσεις χρησιμοποιείται η Επιστημονική αριθμομηχανή.
Φεύγει κάτι από τον υπολογιστή; — όχι: δεν υπάρχει διακομιστής, αποθήκευση ή αναλυτικά· με το κλείσιμο της καρτέλας όλα χάνονται.