Άρθρο #11: Λογικοί ανά-bit τελεστές / Bitwise operators - Τελεστές ολίσθησης
C++ Programmer's Corner :: Προγραμματισμός :: C :: Άρθρα
Σελίδα 1 από 1
Άρθρο #11: Λογικοί ανά-bit τελεστές / Bitwise operators - Τελεστές ολίσθησης
Πρώτα απ' όλα, ας κάνω μια ανακεφαλαίωση για τις λογικές πράξεις, προσθέτοντας μια στην οποία δεν προαναφέρθηκα:
Λογικό AND ( a && b)
Λογικό OR ( a || b)
Λογικό NOT ( !a )
Λογικό XOR ( δεν υπάρχει τελεστής στην C )
Λοιπόν, οι λογικοί "ανα-bit" τελεστές κάνουν ότι και οι απλοί, αλλά για κάθε bit τους αριθμού ξεχωριστά! Με λίγα λόγια, βλέπουν τις μεταβλητές σαν πίνακες από bit, κάνουν την αντίστοιχη πράξη σε ένα-ένα bit και αποθηκεύουν το αποτέλεσμα στην αντίστοιχη θέση του καινούργιου αριθμού, πχ:
Παρεμπιπτόντως, ο τίτλος του θέματος είναι παραπλανητικός, επειδή στη πραγματικότητα αντιμετωπίζονται ως αριθμητικοί τελεστές!
Τέλος, υπάρχουν οι τελεστές ολίσθησης / shift operators, οι οποίοι "σπρώχνουν" τα bits ενός αριθμού κάποιες θέσεις αριστερά ή δεξιά.
Τα σύμβολά τους είναι << για αριστερά και >> για δεξιά. Πχ:
Μια ενδιαφέρουσα ιδιότητα της ολίσθησης είναι ότι για κάθε ολίσθηση προς τα αριστερά κατά ένα, είναι σαν να πολλαπλασιάζεις με το δύο, και προς τα δεξιά κατά ένα είναι σαν να διαιρείς με το δύο.
Λογικό AND ( a && b)
- Κώδικας:
a b result
0 0 0
0 1 0
1 0 0
1 1 1
Λογικό OR ( a || b)
- Κώδικας:
a b result
0 0 0
0 1 1
1 0 1
1 1 1
Λογικό NOT ( !a )
- Κώδικας:
a result
0 1
1 0
Λογικό XOR ( δεν υπάρχει τελεστής στην C )
- Κώδικας:
a b result
0 0 0
0 1 1
1 0 1
1 1 0
Λοιπόν, οι λογικοί "ανα-bit" τελεστές κάνουν ότι και οι απλοί, αλλά για κάθε bit τους αριθμού ξεχωριστά! Με λίγα λόγια, βλέπουν τις μεταβλητές σαν πίνακες από bit, κάνουν την αντίστοιχη πράξη σε ένα-ένα bit και αποθηκεύουν το αποτέλεσμα στην αντίστοιχη θέση του καινούργιου αριθμού, πχ:
- Κώδικας:
a = 10, b = 9
c = a bitwise_and b = 8, γιατί?
a = 1010(2)
b = 1001(2)
c = 1000(2) = 8
Παρεμπιπτόντως, ο τίτλος του θέματος είναι παραπλανητικός, επειδή στη πραγματικότητα αντιμετωπίζονται ως αριθμητικοί τελεστές!
Τέλος, υπάρχουν οι τελεστές ολίσθησης / shift operators, οι οποίοι "σπρώχνουν" τα bits ενός αριθμού κάποιες θέσεις αριστερά ή δεξιά.
Τα σύμβολά τους είναι << για αριστερά και >> για δεξιά. Πχ:
- Κώδικας:
001011(2) << 2 : δύο θέσεις αριστερά
101100(2)
1011(2) >> 1 : μια θέση δεξιά
0101(2) ή 1101(2) ( Αν το ποιο σημαντικό bit είναι 1 και ο αριθμός [u]δεν είναι[/u] unsigned, τότε δεν ξέρουμε πιο απ' αυτά τα αποτελέσματα θα βγει επειδή κάθε μεταγλωττιστής μπορεί να το κατασκευάσει όπως θέλει. Αλλά σε οποιαδήποτε άλλη περίπτωση, ισχύει πάντα το πρώτο αποτέλεσμα )
Μια ενδιαφέρουσα ιδιότητα της ολίσθησης είναι ότι για κάθε ολίσθηση προς τα αριστερά κατά ένα, είναι σαν να πολλαπλασιάζεις με το δύο, και προς τα δεξιά κατά ένα είναι σαν να διαιρείς με το δύο.
Παρόμοια θέματα
» Άρθρο #4: Λογικοί τελεστές - Ροή προγράμματος
» Άρθρο #3: Αριθμητικοί τελεστές
» Άρθρο #9: Συμβολοσειρές
» Άρθρο #1: Γνωριμία με τη C
» Άρθρο #8: Δείκτες
» Άρθρο #3: Αριθμητικοί τελεστές
» Άρθρο #9: Συμβολοσειρές
» Άρθρο #1: Γνωριμία με τη C
» Άρθρο #8: Δείκτες
C++ Programmer's Corner :: Προγραμματισμός :: C :: Άρθρα
Σελίδα 1 από 1
Δικαιώματα σας στην κατηγορία αυτή
Δεν μπορείτε να απαντήσετε στα Θέματα αυτής της Δ.Συζήτησης
|
|