Το προφίλ μας στο Google Plus
2

Συστήματα αρίθμησης και μετατροπές

Πώς από το ωραιότατο δεκαδικό σύστημα αρίθμησης πηγαίνουμε σ’ αυτό το δυαδικό; Πώς γυρίζουμε πάλι πίσω; Με κείνο το δεκαεξαδικό, τι παίζει επιτέλους; Αλήθεια, το δεκαδικό δεν είναι μια χαρά από μόνο του; Τι στο καλό χρειάζονται όλα τ’ άλλα συστήματα αρίθμησης;

Στο παρόν άρθρο αντιμετωπίζουμε αυτά και παρόμοια, αγωνιώδη ερωτήματα της ζωής, συζητώντας για την έννοια του συστήματος αρίθμησης, παρουσιάζοντας τα πιο δημοφιλή εξ αυτών και δείχνοντας πώς κάνουμε μετατροπές από το ένα σύστημα στο άλλο. Αληθινή, ατόφια διασκέδαση για math geeks, δηλαδή, με πληροφορίες που, παρεμπιπτόντως, κρίνονται ως απαραίτητες για όσους διαβάζουν ένα περιοδικό με τον τίτλο “deltaHacker” στο εξώφυλλό του ;)

Τι είναι ένα σύστημα αρίθμησης
Πώς προκύπτουν οι αξίες;
Τα θεσιακά συστήματα αρίθμησης από κοντά
Μετατροπές ακεραίων στο δεκαδικό
Μετατροπές αριθμών με υποδιαστολή στο δεκαδικό
Μετατροπές από το δεκαδικό σε όλα τα άλλα!
Η αγάπη των υπολογιστών προς το δυαδικό και κάποιες άλλες, αγαστές σχέσεις

Τι είναι ένα σύστημα αρίθμησης

Με το δεκαδικό (decimal) σύστημα αρίθμησης και τα δέκα του ψηφία, αυτά από το 0 έως και το 9 συμπεριλαμβανομένων, εξοικειωνόμαστε πριν ακόμα πάμε στο δημοτικό και γενικά το χρησιμοποιούμε σ’ όλη μας τη ζωή. Η τεράστια αυτή εξοικείωση και άνεση που έχουμε με το δεκαδικό δεν σημαίνει πως δεν υπάρχουν κι άλλα συστήματα αρίθμησης. Πράγματι, κάθε φίλος των υπολογιστών και της τεχνολογίας γενικότερα έχει τουλάχιστον ακούσει για το δυαδικό (binary), το οκταδικό (octal) αλλά και το δεκαεξαδικό (hexadecimal) σύστημα αρίθμησης.

Μιλώντας γενικά, ένα σύστημα αρίθμησης αποτελεί μια συμφωνία ώστε να αντιστοιχίζεται νόημα ή καλύτερα αξία (value) κατά τρόπο μοναδικό σε ακολουθίες ψηφίων. Έτσι, στα πλαίσια ενός συγκεκριμένου συστήματος αρίθμησης είναι διαφορετική η αξία που αντιπροσωπεύει, π.χ., η ακολουθία 111: στο δεκαδικό είναι εκατόν έντεκα, στο δεκαεξαδικό διακόσια εβδομήντα τρία, στο οκταδικό εβδομήντα τρία και στο δυαδικό επτά.

(επιστροφή στην αρχή)

Πώς προκύπτουν οι αξίες;

Για να απαντήσουμε στο ερώτημα οφείλουμε πρώτα να ξεκαθαρίσουμε ότι υπάρχουν διάφορα είδη συστημάτων αρίθμησης. Το πιο χρήσιμο και βολικό απ’ αυτά είναι το λεγόμενο θεσιακό (positional). Σε ένα θεσιακό σύστημα αρίθμησης, η ίδια η θέση ενός ψηφίου έχει σημασία για το βάρος (weight) του και τελικά διαμορφώνει την αξία της ακολουθίας στην οποία ανήκει το υπό συζήτηση ψηφίο. Τα συστήματα αρίθμησης που αναφέραμε (δεκαεξαδικό, δεκαδικό, οκταδικό και δυαδικό) είναι όλα τους θεσιακά.

Ας πάρουμε, π.χ., τις ακολουθίες ψηφίων 009, 090 και 900, όλες τους με το ίδιο μήκος (3) και από το ίδιο θεσιακό σύστημα αρίθμησης: το δεκαδικό. Η θέση του 9 σε καθεμία απ’ αυτές τις ακολουθίες διαφέρει, με αποτέλεσμα οι αξίες των τριών ακολουθιών να είναι εννέα, ενενήντα και εννιακόσια αντίστοιχα. Σε ένα άλλο παράδειγμα, ας πάρουμε τις ακολουθίες 011, 101 και 110 — αυτή τη φορά από το δυαδικό σύστημα αρίθμησης. Εδώ έχουμε συνδυασμούς από δύο άσους κι ένα μηδενικό. Σε κάθε ακολουθία οι θέσεις των ψηφίων διαφέρουν, οπότε από τη στιγμή που έχουμε να κάνουμε με θεσιακό σύστημα αρίθμησης ουσιαστικά μιλάμε για τρεις διαφορετικές αξίες: τρία, πέντε και έξι αντίστοιχα.

Εξακολουθούμε να μην έχουμε δείξει πώς προκύπτουν οι αξίες. Θα το κάνουμε σε πολύ λίγο, αφού πρώτα ορίσουμε ακριβέστερα την έννοια του θεσιακού συστήματος αρίθμησης. Μετά, το πώς πώς προκύπτουν οι αξίες θα είναι μάλλον προφανές ;)

(επιστροφή στην αρχή)

Τα θεσιακά συστήματα αρίθμησης από κοντά

Σε ένα θεσιακό σύστημα αρίθμησης με βάση \beta, όπου το \beta είναι ένας ακέραιος μεγαλύτερος του 1 που ονομάζεται βάση, για την αναπαράσταση των αριθμών χρησιμοποιούνται \beta στο πλήθος ψηφία ή γενικά σύμβολα, τα οποία αντιστοιχούν στους πρώτους \beta στο πλήθος φυσικούς αριθμούς ξεκινώντας από το 0.

Ακούγεται παράξενος ο ορισμός; Δείτε μερικά παραδείγματα και θα διαπιστώσετε ότι δεν είναι και τόσο.

Για \beta=2 έχουμε το θεσιακό σύστημα αρίθμησης με βάση 2 ή απλά δυαδικό σύστημα αρίθμησης και για την αναπαράσταση των αριθμών χρησιμοποιούνται τα ψηφία 0 και 1.

Για \beta=8 έχουμε το το θεσιακό σύστημα αρίθμησης με βάση 8 ή απλά οκταδικό σύστημα αρίθμησης και για την αναπαράσταση των αριθμών χρησιμοποιούνται τα ψηφία 0, 1, 2, 3, 4, 5, 6 και 7.

Για \beta=10 έχουμε το δημοφιλέστατο (;) στο σύμπαν θεσιακό σύστημα αρίθμησης με βάση 10 ή απλά δεκαδικό σύστημα αρίθμησης. Για την αναπαράσταση των αριθμών χρησιμοποιούνται τα ψηφία 0, 1, 2, 3, 4, 5, 6, 7, 8 και 9.

Για \beta=16 έχουμε το το θεσιακό σύστημα αρίθμησης με βάση 16 ή απλά δεκαεξαδικό σύστημα αρίθμησης και για την αναπαράσταση των αριθμών χρησιμοποιούνται τα ψηφία 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E και F (16 στο πλήθος), τα οποία αντιστοιχούν στους 16 πρώτους φυσικούς αριθμούς ξεκινώντας από το 0, δηλαδή στους 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 και 15.

Επειδή μιλάμε για θεσιακά συστήματα αρίθμησης, είναι προφανές ότι η αξία ενός αριθμού εξαρτάται από τις θέσεις στις οποίες βρίσκονται τα διάφορα ψηφία του. Γενικά, λοιπόν, σε ένα θεσιακό σύστημα με βάση \beta οι θετικοί ακέραιοι γράφονται ως

(a_n a_{n-1} \cdots a_1 a_0)_\beta

όπου φυσικά

0 \le a_i \lt \beta

και η αξία τους είναι

a_0 \beta^0 + a_1 \beta^1 + \cdots + a_{n-1} \beta^{n-1} + a_n \beta^n

Ισχύει, λοιπόν, ότι

(a_n a_{n-1} \cdots a_1 a_0)_\beta = a_0 \beta^0 + a_1 \beta^1 + \cdots + a_{n-1} \beta^{n-1} + a_n \beta^n = \sum_{i=0}^{n} a_i \beta^i

Όταν εννοείται από τα συμφραζόμενα, η βάση \beta παραλείπεται από τη γραφή ενός αριθμού. Έτσι, όταν μιλάμε για δεκαδικούς αριθμούς γράφουμε απλά 129 αντί για (129)_{10}, όταν μιλάμε για δυαδικούς γράφουμε 1101 αντί για (1101)_2, όταν αναφερόμαστε σε δεκαεξαδικούς γράφουμε 1AFB αντί για (1AFB)_{16} κ.ο.κ.

(επιστροφή στην αρχή)

Μετατροπές ακεραίων στο δεκαδικό

Ας δούμε μερικά παραδείγματα υπολογισμού, βρίσκοντας τις αξίες αριθμών από διάφορα συστήματα αρίθμησης. Ουσιαστικά, αυτό που κάνουμε στη συνέχεια είναι να μετατρέψουμε κάποιους αριθμούς στους ισοδύναμούς τους στο δεκαδικό σύστημα.

(101110)_2 =
0 \cdot 2^0 + 1 \cdot 2^1 + 1 \cdot 2^2 + 1 \cdot 2^3 + 0 \cdot 2^4 + 1 \cdot 2^5 =
0 \cdot 1 + 1 \cdot 2 + 1 \cdot 4 + 1 \cdot 8 + 0 \cdot 16 + 1 \cdot 32 =
2 + 4 + 8 + 32 =
46

(712006)_8 =
6 \cdot 8^0 + 0 \cdot 8^1 + 0 \cdot 8^2 + 2 \cdot 8^3 + 1 \cdot 8^4 + 7 \cdot 8^5 =
6 \cdot 1 + 0 \cdot 8 + 0 \cdot 64 + 2 \cdot 512 + 1 \cdot 4096 + 7 \cdot 32768 =
6 + 1024 + 4096 + 229376 =
234502

(2FE0B)_{16} =
11 \cdot 16^0 + 0 \cdot 16^1 + 14 \cdot 16^2 + 15 \cdot 16^3 + 2 \cdot 16^4 =
11 \cdot 1 + 0 \cdot 16 + 14 \cdot 256 + 15 \cdot 4096 + 2 \cdot 65536 =
11 + 3584 + 61440 + 131072 =
196107

Παράδειγμα υπολογισμού αξίας αριθμού από το δεκαδικό σύστημα δεν δίνουμε, μιας και όλοι είμαστε εξοικειωμένοι μ’ αυτούς. Ορισμένοι τιτάνες προγραμματιστές είναι το ίδιο καλά εξοικειωμένοι με το δεκαεξαδικό ή το δυαδικό σύστημα, όπως εξάλλου αποδεικνύουν και προϊόντα σαν αυτό. Αλλά ας μην ξεφεύγουμε :)

(επιστροφή στην αρχή)

Μετατροπές αριθμών με υποδιαστολή στο δεκαδικό

Μέχρι τώρα δείξαμε πώς υπολογίζονται οι αξίες ακεραίων αριθμών από διάφορα συστήματα αρίθμησης. Παρόμοια υπολογίζονται και οι αξίες αριθμών με υποδιαστολή, οι οποίοι έχουν πεπερασμένου ή άπειρου πλήθους ψηφία στα δεξιά της. Αναλυτικότερα, συμβολίζοντας την υποδιαστολή με μια τελεία, η αξία ενός αριθμού από το σύστημα αρίθμησης με βάση \beta είναι:

(a_n a_{n-1} \cdots a_1 a_0 . c_1 c_2 \cdots c_{m-1} c_m \cdots)_\beta = \sum_{i=0}^{n} a_i \beta^i + \sum_{i=1}^{\infty} c_i \beta^{-i}

όπου 0 \leq a_i < \beta[/latex] και [latex]0 \leq c_i < \beta[/latex]. Δείτε, π.χ., την αξία αυτού του ωραιότατου δυαδικού αριθμού με υποδιαστολή:  <br /> [latex](11.001001000011)_2 =
1 \cdot 2^0 + 1 \cdot 2^1 + \frac{1}{2^3} + \frac{1}{2^6} + \frac{1}{2^{11}} + \frac{1}{2^{12}} =
3 + 0.125 + 0.015625 + 0.00048828125 + 0.000244140625 =
3.141357421875 \approx \pi

Είχατε δει ξανά το \pi γραμμένο έτσι; Εμείς πάντως δεν είχαμε --τουλάχιστον όχι πριν χρησιμοποιήσουμε αυτόν τον μετατροπέα--, γεγονός που μας θυμίζει ότι είναι ώρα να πούμε πώς από το δεκαδικό πηγαίνουμε στο δυαδικό, στο οκταδικό ή στο δεκαεξαδικό σύστημα αρίθμησης.

(επιστροφή στην αρχή)

Μετατροπές από το δεκαδικό σε όλα τα άλλα!

Θα δούμε πρώτα πώς μετατρέπουμε δεκαδικούς αριθμούς χωρίς υποδιαστολή σε άλλα συστήματα αρίθμησης και μετά πώς μετατρέπουμε δεκαδικούς αριθμούς με υποδιαστολή -- επίσης σε άλλα συστήματα αρίθμησης.

Γενικά, για τη μετατροπή ενός θετικού ακέραιου από το δεκαδικό σύστημα στο σύστημα με βάση \beta, κάνουμε διαδοχικές διαιρέσεις με το \beta και σημειώνουμε τα υπόλοιπα της διαίρεσης, μιας κι αυτά είναι τα ψηφία του αριθμού μας στο \beta-δικό σύστημα. Οι διαιρέσεις γίνονται στον αρχικό αριθμό και στο πηλίκο της προηγούμενης διαίρεσης και σταματούν όταν πάρουμε πηλίκο 0. Το πώς ακριβώς δουλεύει η διαδικασία μετατροπής φαίνεται μέσα από τα ακόλουθα τρία παραδείγματα.

Παράδειγμα 1. Μετατροπή του 119 στο δυαδικό σύστημα (\beta=2).

decimal			119

step 1:	119/2
				quotient 59	remainder 1 (rightmost digit)
step 2:	59/2
				quotient 29	remainder 1
step 3:	29/2
				quotient 14	remainder 1
step 4:	14/2
				quotient 7	remainder 0
step 5:	7/2
				quotient 3	remainder 1
step 6:	3/2
				quotient 1	remainder 1
step 7:	1/2
				quotient 0	remainder 1 (leftmost digit)

binary			1110111

Παράδειγμα 2. Μετατροπή του 6517 στο οκταδικό σύστημα (\beta=8).

decimal			6517

step 1:	6517/8
				quotient 814	remainder 5 (rightmost digit)
step 2:	814/8
				quotient 101	remainder 6
step 3:	101/8
				quotient 12		remainder 5
step 4:	12/8
				quotient 1		remainder 4
step 5:	1/8
				quotient 0		remainder 1 (leftmost digit)

octal			14565

Παράδειγμα 3. Μετατροπή του 854062 στο δεκαεξαδικό σύστημα (\beta=16).

decimal			854062

step 1:	854062/16
				quotient 53378	remainder 14=E (rightmost digit)
step 2:	53378/16
				quotient 3336	remainder 2
step 3:	3336/16
				quotient 208	remainder 8
step 4:	208/16
				quotient 13		remainder 0
step 5:	13/16
				quotient 0		remainder 13=D (leftmost digit)

hexadecimal 	D082E

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

a_n a_{n-1} \cdots a_1 a_0 . c_1 c_2 \cdots c_{m-1} c_m \cdots

όπου φυσικά 0 \leq a_i < 10[/latex] και [latex]0 \leq c_i < 10[/latex]. Στη γενική περίπτωση, τα ψηφία στα δεξιά της υποδιαστολής, τα [latex]c_i[/latex], ενδέχεται να είναι άπειρα στο πλήθος, με περιοδικότητα ή όχι. Αλλά ας μην ξεφεύγουμε. Για τη μετατροπή του αριθμού μας στο σύστημα αρίθμησης με βάση [latex]\beta[/latex], μετατρέπουμε πρώτα το ακέραιο μέρος του και μετά το δεκαδικό. Ακολούθως γράφουμε το ακέραιο μέρος στο [latex]\beta[/latex]-δικό, στα δεξιά του βάζουμε την υποδιαστολή και στα δεξιά της υποδιαστολής γράφουμε το κλασματικό μέρος -- επίσης στο [latex]\beta[/latex]-δικό. Τη μετατροπή του ακέραιου μέρους την είδαμε προηγουμένως, μένει λοιπόν να δούμε και πώς γίνεται η μετατροπή του κλασματικού μέρους. Ο γενικός αλγόριθμος έχει ως ακολούθως. <br /> <em><br /> <strong>1.</strong> το κλασματικό μέρος πολλαπλασιάζεται με τη βάση [latex]\beta και παίρνουμε ένα ακέραιο μέρος κι ένα κλασματικό
2. το ακέραιο μέρος είναι ένα νέο ψηφίο στα δεξιά της υποδιαστολής στο \beta-δικό
3. αν το κλασματικό μέρος που πήραμε από το 1 είναι μηδέν ή έχουμε αρκετά ψηφία για την επιθυμητή ακρίβεια, πήγαινε στο 5
4. πήγαινε στο βήμα 1 και λάβε υπόψη το νέο κλασματικό μέρος, αυτό δηλαδή που πήραμε από την προηγούμενη επανάληψη
5. έχουμε όλο το κλασματικό μέρος στο \beta-δικό και η διαδικασία σταματά

Ας δούμε στην πράξη τη μετατροπή του δεκαδικού 3.14159265358979 (προσέγγιση του \pi) στο δεκαεξαδικό (\beta=16). Το ακέραιο μέρος είναι το ίδιο και στα δύο συστήματα αρίθμησης, πάμε λοιπόν να μετατρέψουμε το κλασματικό, δηλαδή το 0.14159265358979:

step  1: 0.14159265358979 x 16 = 2.26548245743669		2 (leftmost digit)

step  2: 0.26548245743669 x 16 = 4.24771931898704		4

step  3: 0.24771931898704 x 16 = 3.96350910379264		3

step  4: 0.96350910379264 x 16 = 15.4161456606822		15=F

step  5: 0.4161456606822  x 16 = 6.6583305709152		6

step  6: 0.6583305709152  x 16 = 10.5332891346432		10=Α

step  7: 0.5332891346432  x 16 = 8.5326261542912		8

step  8: 0.5326261542912  x 16 = 8.5220184686592		8

step  9: 0.5220184686592  x 16 = 8.3522954985472		8

step 10: 0.3522954985472  x 16 = 5.6367279767552		5

step 11: 0.6367279767552  x 16 = 10.1876476280832		10=Α

Η διαδικασία μπορεί να συνεχιστεί, αποφασίζουμε όμως ότι 11 δεκαεξαδικά ψηφία στα δεξιά της υποδιαστολής αποτελούν ικανοποιητική ακρίβεια. Το 3.14159265358979, λοιπόν, στο δεκαεξαδικό γράφεται ως 3.243F6A8885A.

(επιστροφή στην αρχή)

Η αγάπη των υπολογιστών προς το δυαδικό και κάποιες άλλες, αγαστές σχέσεις

Οι υπολογιστές τρέφουν μεγάλη συμπάθεια για το δυαδικό σύστημα. Τόσο μεγάλη, που στην πραγματικότητα μόνο αυτό καταλαβαίνουν. Αυτά τα συναισθήματα δεν προέκυψαν τυχαία. Η ίδια η λογική λειτουργίας των υπολογιστών βασίζεται στη Λογική Boole, ένα είδος μαθηματικής λογικής με δύο τιμές. Έτσι, τα δύο ψηφία του δυαδικού συστήματος είναι ακριβώς όσα χρειάζονται για να κωδικοποιηθούν οι δύο τιμές της Άλγεβρας Boole. (Το 0 αντιστοιχεί στο λογικό Όχι και το 1 στο λογικό Ναι της Άλγεβρας Boole.) Πέρα από την Άλγεβρα Boole, η κατασκευή hardware που μπορεί να διακρίνει δύο μόνο καταστάσεις είναι ευκολότερη από την κατασκευή hardware που μπορεί να διακρίνει περισσότερες.

Τώρα, επειδή 2^3=8 και 2^4=16, για την αναπαράσταση ενός οκταδικού ψηφίου χρειάζονται το πολύ τρία δυαδικά ψηφία, ενώ για την αναπαράσταση ενός δεκαεξαδικού ψηφίου χρειάζονται το πολύ τέσσερα δυαδικά ψηφία. Στο ακόλουθο πίνακα φαίνονται οι αντιστοιχίσεις μεταξύ οκταδικών και δυαδικών ψηφίων.

Octal digit	Binary triplet
===========	==============
0			000
1			001
2			010
3			011
4			100
5			101
6			110
7			111

Στον επόμενο πίνακα φαίνονται και οι αντιστοιχίσεις μεταξύ δεκαεξαδικών και δυαδικών ψηφίων.

Binary digit	Binary quartet
============	==============
0				0000
1				0001
2				0010	
3				0011
4				0100
5				0101
6				0110
7				0111
8				1000
9				1001
A				1010
B				1011
C				1100
D				1101
E				1110
F				1111

Χρησιμοποιώντας πάντα τρία δυαδικά για κάθε οκταδικό ψηφίο και τέσσερα δυαδικά για κάθε δεκαεξαδικό ψηφίο, μπορούμε να μετατρέπουμε οκταδικούς σε δυαδικούς και δεκαεξαδικούς σε δυαδικούς απευθείας, ψηφίο προς ψηφίο, κοιτάζοντας απλά τους προηγούμενους πίνακες. Για παράδειγμα, αμέσως βλέπουμε ότι

(2713)_8 = (010111001011)_2 = (10111001011)_2

κι ότι

(7AF)_{16} = (011110101111)_2 = (11110101111)_2

Μπορούμε βέβαια να πηγαίνουμε κι αντίστροφα. Προσθέτοντας στ' αριστερά ενός δυαδικού αριθμού όσα μηδενικά χρειάζονται ώστε ν' αποτελείται μόνο από τριάδες ή μόνο από τετράδες ψηφίων, μπορούμε να μετατρέπουμε άμεσα στο οκταδικό ή στο δεκαεξαδικό σύστημα αντίστοιχα.

Αν μη τι άλλο, λοιπόν, οι οκταδικοί και οι δεκαεξαδικοί αριθμοί που βλέπουμε σε κάποια προγράμματα όπως είναι οι debuggers, χρησιμεύουν ώστε να απεικονίζονται με λιγότερα ψηφία οι δυαδικοί αριθμοί, οι μοναδικοί που καταλαβαίνουν οι υπολογιστές στο βασικό τους επίπεδο.

(επιστροφή στην αρχή)

Σας άρεσε το άρθρο; Αν ναι, τι θα λέγατε για ένα tip στο PayPal;

2 Responses to “Συστήματα αρίθμησης και μετατροπές”

  1. Guest | 07/04/2012 at 21:32

    Οι άνθρωποι χωρίζονται σε 10 κατηγορίες:
    αυτοί που ξέρουν το δυαδικό σύστημα και αυτοί που δεν το ξέρουν…

    • electrovesta | 09/04/2012 at 20:37

      Οι άνθρωποι χωρίζονται σε 10 κατηγορίες: Αυτοί που ξέρουν το δυαδικό σύστημα, αυτοί που δεν το ξέρουν, και αυτοί που δεν μπορούν να το ξεχωρίσουν από το τριαδικό σύστημα.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων