(Έκθεση του Black Shadow για το masktm.cjb.net)
Επειδή ο υπολογιστής και κάποια προγράμματα δεν χρησιμοποιούν το δεκαδικό σύστημα ως σύστημα αρίθμησης αλλά το δυαδικό ,το δεκαεξαδικό και μερικές φορές το οκταδικό ,θα πρέπει να γνωρίζουμε πως να μετατρέπουμε έναν αριθμό από το δεκαδικό σύστημα αρίθμησης στα άλλα συστήματα αρίθμησης και το αντίστροφο.Τα ψηφία που χρησιμοποιούν τα διάφορα συστήματα αρίθμησης αναφέρονται στον παρακάτω πίνακα :
Δεκαδικό Δυαδικό Δεκαεξαδικό Οκταδικό 0 0 0 0 1 1 1 1 2 10 2 2 3 11 3 3 4 100 4 4 5 101 5 5 6 110 6 6 7 111 7 7 8 1000 8 10 9 1001 9 11 10 1010 Α 12 11 1011 Β 13 12 1100 C 14 13 1101 D 15 14 1110 E 16 15 1111 F 17 16 10000 10 20
α) Μετατροπή από δεκαδικό σε άλλα συστήματα αρίθμησης.
Για να μετατρέψουμε έναν αριθμό από δεκαδικό σε οποιοδήποτε άλλο σύστημα ,ακολουθούμε την εξής διαδικασία.Το ακέραιο μέρος ενός αριθμού το διαιρούμε με τον αριθμό του συστήματος που θέλουμε να τον μετατρέψουμε.Για παράδειγμα θέλουμε να μετατρέψουμε έναν αριθμό από το δεκαδικό σε δυαδικό ,τότε θα διαιρέσουμε τον αριθμό αυτόν με το δύο.Καθώς διαιρούμε τον αριθμό με το δύο κάθε φορά ,το υπόλοιπο της κάθε διαίρεσης θα είναι το δεξιότερο ψηφίο του αριθμού (στο δυαδικό σύστημα) και το νέο πηλίκο που παίρνουμε κάθε φορά θα το διαιρούμε με το δύο και θα παίρνουμε καινούργιο υπόλοιπο ώσπου να μηδενιστεί το πηλίκο.Ενώ το κλασματικό μέρος ενός αριθμού το πολλαπλασιάζουμε με δύο.Το ακέραιο μέρος του αριθμού που προκύπτει από τον πολλαπλασιασμό του κλασματικού μέρους με το δύο θα αποτελέσει το αριστερότερο ψηφίο του νέου κλασματικού αριθμού στο δυαδικό σύστημα, μετά την υποδιαστολή.Έπειτα παίρνουμε το αποτέλεσμα που προέκυψε από τον πολλαπλασιασμό του δύο με το κλασματικό μέρος του αριθμού και αφαιρούμε το ακέραιο μέρος που χρησιμοποιήσαμε για τον σχηματισμό του κλασματικού μέρους στο δυαδικό σύστημα από τον νέο κλασματικό αριθμό. Αυτόν τον νέο αριθμό τον πολλαπλασιάζουμε πάλι με το δύο και εκτελούμε την προηγούμενη διαδικασία ,μέχρι ο νέος κλασματικός αριθμός να γίνει μηδέν. Άμα ο νέος κλασματικός αριθμός είναι περιοδικός τότε κάνουμε αποκοπή και στρογγυλοποίηση. Επειδή μπορεί να σας μπέρδεψα λίγο θα σας παραθέσω κάποια παραδείγματα μετατροπών.
Μετατροπή από δεκαδικό σε δυαδικό Χ(10) -> Χ(2) Ακέραιος 45(10) -> Χ(2) Πηλίκο Υπόλοιπο Δυαδικός Αριθμός (Χ) 45 / 2 22 1 1 22 / 2 11 0 01 11 / 2 5 1 101 5 / 2 2 1 1101 2 / 2 1 0 01101 1 / 2 0 1 101101 45(10) -> 101101(2)Κλασματικό μέρος 0,182(10) -> Χ(2) Γινόμενο Ακέραιος Δυαδικός Αριθμός (Χ) 0,182 * 2 0,364 0 0,0 0,364 * 2 0,728 0 0,00 0,728 * 2 1,456 1 0,001 0,456 * 2 0,912 0 0,0010 0,912 * 2 1,824 1 0,00101 0,824 * 2 1,648 1 0,001011 0,648 * 2 1,296 1 0,0010111 0,182(10) -> 0,0010111(2) (Μετά από στρογγυλοποίηση και αποκοπή)Μετατροπή από δεκαδικό σε οκταδικό Χ(10) -> Χ(8) Ακέραιος 45(10) -> X(8) Πηλίκο Υπόλοιπο Οκταδικός Αριθμός (Χ) 45 / 8 5 5 5 5 / 8 0 5 55 45(10) -> 55(8) Κλασματικό μέρος 0,182(10) -> Χ(8) Γινόμενο Ακέραιος Οκταδικός Αριθμός (Χ) 0,182 * 8 1,456 1 0,1 0,456 * 8 3,648 3 0,13 0,648 * 8 5,184 5 0,135 0,184 * 8 1,472 1 0.1351 0,472 * 8 3,776 3 0,13513 0,776 * 8 6,208 6 0,135136 0,182(10) -> 0,135136(8) (Μετά από στρογγυλοποίηση και αποκοπή) Μετατροπή από δεκαδικό σε δεκαεξαδικό Χ(10) -> Χ(16) Ακέραιος 45(10) -> X(16) Πηλίκο Υπόλοιπο Δεκαεξαδικός Αριθμός (Χ) 45 / 16 2 13 D Επειδή το 13 στο δεκαεξαδικό σύστημα είναι το D 2 / 16 0 2 2D (Δες τον πίνακα) 45(10) -> 2D(16)
Κλασματικό μέρος 0,182(10) -> Χ(16) Γινόμενο Ακέραιος Δεκαεξαδικός Αριθμός (Χ) 0,182 * 16 2,912 2 0,2 0,912 * 16 14,592 14 0,2Ε 0,592 * 16 9,472 9 0,2Ε9 0,472 * 16 7,552 7 0,2Ε97 0,552 * 16 8,832 8 0,2Ε978 0,832 * 16 13,312 13 0,2Ε978D 0,182(10) -> 0,2E978D(16) (Μετά από στρογγυλοποίηση και αποκοπή)
β) Μετατροπή από άλλα συστήματα αρίθμησης σε δεκαδικό.
Τώρα για να κάνουμε το αντίστροφο , θα είναι λίγο διαφορετικό από τα προηγούμενα.Καταρχήν μετράμε από πόσα ψηφία αποτελείται ο αριθμός που θέλουμε να μετατρέψουμε ξεκινώντας από το μηδέν από δεξιά προς τα αριστερά όταν πρόκειται για ακέραιο αριθμό.Όμως όταν ο αριθμός είναι δεκαδικός τότε μετράμε τα ψηφία του αριθμού αυτού από την υποδιαστολή και μετά ,δηλαδή από τα αριστερά προς τα δεξιά ξεκινώντας την αρίθμησή τους από το μείον ένα.Έτσι για να μετατρέψουμε τώρα έναν αριθμό από ένα σύστημα αρίθμησης που βρισκόμαστε στο δεκαδικό ,τότε πολλαπλασιάζουμε το κάθε ψηφίο του αριθμού με έναν αριθμό που θα έχει βάση τον αριθμό του συστήματος αρίθμησης που αναπαρίσταται ο αριθμός ,π.χ. στο δυαδικό το δύο ,και εκθέτη τον αριθμό της θέσης που βρίσκεται το κάθε ψηφίο.Στο τέλος προσθέτουμε όλα τα αποτελέσματα και το αποτέλεσμα αυτό θα είναι ο αριθμός που ζητάμε στο δεκαδικό σύστημα.Με τα παραδείγματα που θα σας γράψω παρακάτω θα το καταλάβετε καλύτερα.
Μετατροπή από δυαδικό σε δεκαδικό Χ(2) -> Χ(10) 101101,0010111(2) -> Χ(10) Αρίθμηση των ψηφίων του αριθμού. 150413120110,0-10-21-30-41-51-61-7 Πολλαπλασιάζουμε το κάθε ένα ψηφίο. 1 * 25 + 0 * 24 + 1 * 23 + 1 * 22 + 0 * 21 + 1 * 20 + 0 * 2-1 + 0 * 2-2 + 1 * 2-3 + 0 * 2-4 + 1 * 2-5 + 1 * 2-6 + 1 * 2-7 = (β-α = 1/βα) 32 + 0 + 8 + 4 + 0 + 1 + 0 + 0 + 0,125 + 0 + 0,03125 + 0,015625 + 0,007813 = 45,179688(10) Μετατροπή από οκταδικό σε δεκαδικό Χ(8) -> Χ(10) 55,135136(8) -> Χ(10) Αρίθμηση των ψηφίων του αριθμού. 5150,1-13-25-31-43-56-6 Πολλαπλασιάζουμε το κάθε ένα ψηφίο. 5 * 81 + 5 * 80 + 1 * 8-1 + 3 * 8-2 + 5 * 8-3 + 1 * 8-4 + 3 * 8-5 + 6 * 8-6 = 40 + 5 + 0,125 + 0,03125 + 0,009766 + 0,000244 + 0,0001 + 0,0000229 = 45,1663829(10) Μετατροπή από δεκαεξαδικό σε δεκαδικό Χ(16) -> Χ(10) 2D,2E978D(16) -> Χ(10) Αρίθμηση των ψηφίων του αριθμού. 21130,2-114-29-37-48-513-6 Πολλαπλασιάζουμε το κάθε ένα ψηφίο. 2 * 161 + 13 * 160 + 2 * 16-1 + 14 * 16-2 + 9 * 16-3 + 7 * 16-4 + 8 * 16-5 + 13 * 16-6 = 32 + 13 + 0,125 + 0,0546875 + 0,00219727 + 0,00010681 + 0,00000762 + 0,00000077 = 45,18199997(10)
Παρατηρούμε ότι οι δεκαδικοί αριθμοί δεν συμπίπτουν ακριβώς με τις αρχικές τιμές.Δηλαδή έχουμε κάποιες απώλειες.Αυτές οι απώλειες οφείλονται στις στρογγυλοποιήσεις και στις αποκοπές που κάναμε στα προηγούμενα αποτελέσματα.
γ) Μετατροπή από δυαδικό σε δεκαεξαδικό και οκταδικό
Όπως όλοι ξέρουμε ότι 23 μας κάνει 8 και 24 μας κάνει 16.Αυτό το πράγμα θα σας βοηθήσει να καταλάβετε πως μετατρέπουμε έναν δυαδικό αριθμό σε οκταδικό και δεκαεξαδικό και το αντίθετο.Επειδή όπως είπαμε προηγουμένως ότι 23 μας κάνει 8 έτσι για να μετατραπεί ένας δυαδικός αριθμός σε οκταδικό ,θα χρειαστεί 3 ψηφία για να παραστήσει ένα ψηφίο ενός οκταδικού αριθμού.Έτσι και για το δεκαεξαδικό θα χρειαστεί 4 ψηφία για να παραστήσει ένα ψηφίο ενός δεκαεξαδικού αριθμού.Για αυτό το λόγο όταν θέλουμε να μετατρέψουμε έναν δυαδικό αριθμό σε οκταδικό τότε χωρίζουμε το δυαδικό αριθμό σε τριάδες ή σε τετράδες όταν πρόκειται για το δεκαεξαδικό σύστημα , ξεκινώντας από δεξιά προς τα αριστερά όταν πρόκειται για ακέραιους αριθμούς και από τα αριστερά προς τα δεξιά όταν πρόκειται για δεκαδικούς αριθμούς ξεκινώντας από την υποδιαστολή.Άμα περισσέψουν στο τέλος κάποια ψηφία που δεν θα συμπληρώνουν τριάδες ή τετράδες ,για το δεκαεξαδικό σύστημα ,τότε συμπληρώνουμε με μηδενικά μπροστά από τα ψηφία που έχουν περισσέψει.Έπειτα αντικαθιστούμε τον κάθε τριψήφιο ή τετραψήφιο δυαδικό αριθμό με ένα ψηφίο που αντιστοιχεί στο οκταδικό σύστημα όταν είναι τριάδες και στο δεκαεξαδικό σύστημα όταν είναι τετράδες.Σε αυτήν την μετατροπή θα σας βοηθήσει ο αρχικός πίνακας.Θα σας παραθέσω κάποια παραδείγματα και θα το καταλάβετε:
Μετατροπή από δυαδικό σε οκταδικό 110101000,101010(2) -> X(8) | 3 | | 3 | | 3 | | 3 | | 3 | 110 101 000 ,101 010 || || || || || / / / / / 6 5 0 , 5 2 (Δες τον πίνακα ότι το 110(2) αντιστοιχεί στο 6(8) ) 110101000,101010(2) -> 650,52(8)
Μετατροπή από δυαδικό σε δεκαεξαδικό 110101000,101010(2) -> X(16) | 4 | | 4 | | 4 | | 4 | | 4 | 0001 1010 1000 ,1010 1000 || || || || || / / / / / 1 Α 8 , Α 8 110101000(2) -> 1Α8,Α8(16)
δ) Μετατροπή από δεκαεξαδικό και οκταδικό σε δυαδικό
Είναι ακριβώς η αντίστροφη διαδικασία από την προηγούμενη.Όπως και προηγουμένως το κάθε ψηφίο του οκταδικού αριθμού θα αντιστοιχεί σε τρία ψηφία του δυαδικού αριθμού και τέσσερα ψηφία για κάθε ψηφίο του δεκαεξαδικού αριθμού.Όταν δεν συμπληρώνουν τις κατάλληλες τριάδες ή τετράδες τότε συμπληρώνουμε με μηδενικά στην αρχή του κάθε αριθμού:
Μετατροπή από οκταδικό σε δυαδικό.
650,52(8) -> X(2) 6 5 0 , 5 2 || || || || || / / / / / 110 101 000 , 110 010 650,52(8) -> 110101000,110010(2)Μετατροπή από δεκαεξαδικό σε δυαδικό. 1Α8,Α8(16) -> X(2) 1 Α 8 , Α 8 || || || || || / / / / / 0001 1010 1000 ,1010 1000