Δυαδικά πεδία (BITFIELDS) |
Το πρόγραμμα που βρίσκεται στο αρχείο BITFIELD.C παρουσιάζει ένα παράδειγμα δήλωσης και χρήσης δυαδικών πεδίων. Η δήλωση περιλαμβάνει την ένωση number που έχει δύο στοιχεία. Το πρώτο στοιχείο είναι ο ακέραιος index ενώ το δεύτερο στοιχείο είναι η εγγραφή bits. Η εγγραφή περιέχει τρείς μη- προσημασμένους ακεραίους (unsigned int) x, y, z οι οποίοι έχουν ένα ιδιαίτερο χαρακτηριστικό. Μετά τη δήλωσή του ονόματος ακολουθεί ένας αριθμός που καθορίζει το εύρος του ακεραίου σε bits. Στην ουσία δηλαδή δεν ορίζεται ένας πλήρης ακέραιος των 16 bits αλλά ένας 'μικρό;' ακέραιος του 1 ή 2 ή όσων θέλουμε bits. Οι μεταβλητές αυτές ονομάζονται δυαδικά πεδία (bitfields). Επιπλεον, αφού οι μεταβλητές x, y, z είναι πεδία της εγγραφής bits αποθηκεύονται σε γειτονικές θέσεις μνήμης χωρίς να αφήνονται κενά bits ανάμεσά τους. Επομένως οι τρείς μεταβλητές καταλαμβάνουν 5 διαδοχικά bits. Τελικά, αφού η εγγραφή είναι τμήμα μιάς ένωσης αυτό σημαίνει οτι οι τρείς αυτές μεταβλητές αντιστοιχούν στα 5 λιγότερο σημαντικά bits του ακεραίου index. Το πρόγραμμα μετρά από το 0 έως το 19 μέσω του index και εκτυπώνει τόσο την τιμή του index όσο και τις αντίστοιχες τιμές των δυαδικών πεδίων. index = 0, bits = 0 0 0 index = 1, bits = 0 0 1 index = 2, bits = 0 1 0 index = 3, bits = 0 1 1 index = 4, bits = 0 2 0 index = 5, bits = 0 2 1 index = 6, bits = 0 3 0 index = 7, bits = 0 3 1 index = 8, bits = 1 0 0 index = 9, bits = 1 0 1 index = 10, bits = 1 1 0 index = 11, bits = 1 1 1 index = 12, bits = 1 2 0 index = 13, bits = 1 2 1 index = 14, bits = 1 3 0 index = 15, bits = 1 3 1 index = 16, bits = 2 0 0 index = 17, bits = 2 0 1 index = 18, bits = 2 1 0 index = 19, bits = 2 1 1 Πρέπει να τονιστεί οτι οι δηλώσεις δυαδικών πεδίων είναι συνυφασμένες με τον τύπο του μη προσημασμένου ακεραίου. Η χρήση τους είναι προφανής γιά την επικοινωνία με το λειτουργικό σύστημα μέσω καταχωρητών. |
![]() |
![]() |
![]() |