Τελαστές χειρισμού ΒITS |
Οι τελεστές αυτοί χρησιμοποιούνται γιά την εκτέλεση λογικών ή αριθμητικών πράξεων σε επίπεδο bit. Οι τελεστές χειρισμού bits είναι οι δυαδικοί & λογικό και (AND): αν και τα δύο bits είναι 1, το αποτέλεσμα είναι 1. | λογικό συζευκτικό ή (OR): αν ένα τουλάχιστο από τα δύο bits είναι 1, το αποτέλεσμα είναι 1. ^ λογικό διαζευκτικό ή (XOR): αν ένα μόνο από τα δύο bits είναι 1, το αποτέλεσμα είναι 1. και ο μοναδικός ~ λογική αντιστροφή (NOT): αν το bit είναι 1 το αποτέλεσμα είναι 0, αν το bit είναι 0, το αποτέέσμα είναι 1. Οι τελεστές χειρισμού bits εφαρμόζονται συνήθως σε μεταβλητές των τύπων char, unsigned int και int. Παραδείγματα χειρισμών bits δίνονται στο πρόγραμμα του αρχείου BITOPS.C. Το πρόγραμμα δηλώνει τον χαρακτήρα mask και τον πίνακα 5 χαρακτήρων number που χρησιμοποιούνται σαν τελούμενα των εκφράσεων ενώ οι χαρακτήρες and,or,xor,inv αποθηκεύουν τα αποτελέσματα. Ο πίνακας number αρχικοποιείται με εκχωρήσεις δεκαεξαδικών τιμών που γράφονται στη μορφή 0Xδεκαεξαδικά ψηφία δηλαδή κάποια από τα ψηφία 0, 1, 2, ..., 9, Α, Β, ..., F. Επειδή η μεταβλητή είναι του τύπου χαρακτήρα γράφουμε δύο δεκαεξαδικά ψηφία αφού τα καθένα αντιστοιχεί σε 4 bits. Θα μπορούσαμε να χρησιμοποιήσουμε οκταδικά ψηφία στη μορφή 0οκταδικά ψηφία δηλαδή κάποια από τα ψηφία 0, 1, 2, ..., 7. Επειδή ενα οκταδικό ψηφίο αντιστιοιχεί σε τρία bits η αρχικοποίηση του byte απαιτεί 3 οκταδικά ψηφία, όπου το πλέον σημαντικό μπορεί να πάρει μόνο τις τιμές 0, 1, 2, 3. Στη συνέχεια αρχικοποιούμε και τη μεταβλητή mask και εκτελούμε δύο σειρές πράξεων με τους διάφορους τελετές λειτουργιών bit. Τα αποτελέσματα εφανίζονται στην οθόνη όπως παρακάτω. Να σημειωθεί οτι όπως έχουμε ήδη πει σε προηγούμενο παράδειγμα η εκτύπωση σε μορφή δεκαεξαδικού μετατρέπει το αριθμό αυτόματα σε ακέραιο και επεκτείνει το πιό σημαντικό bit του πρώτου byte στο νέο byte. Γιά να αποφύγουμε αυτή τη περιπλοκή θα έπρεπε να εκτελέσουμε τις πράξεις με ακεραίους. nmbr mask and or xor inv 0 f 0 f f ffff 11 f 1 1f 1e ffee 22 f 2 2f 2d ffdd 44 f 4 4f 4b ffbb ff88 f 8 ff8f ff87 77 ffff f f ffff fff0 0 0 22 0 22 22 ffff 11 22 0 33 33 ffee 22 22 22 22 0 ffdd 44 22 0 66 66 ffbb ff88 22 0 ffaa ffaa 77 ffff 22 22 ffff ffdd 0 |
![]() |
![]() |
![]() |