Οι τελεστές αυτοί χρησιμοποιούνται γιά την εκτέλεση λογικών ή αριθμητικών
πράξεων σε επίπεδο 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
|