Bitfields programming
From Teknologisk videncenter
C and C++ programming
In the example below - Alarmclock data structure - the complete structure will live in 4 bytes on a 32 bit memorysystem.
#include <stdio.h>
struct display {
unsigned format : 1; // 24 hour or 12 hour format ( 0 = 24 and 1 = 12)
unsigned pm : 1; // PM and AM leds. If 12 hour format pm or am (pm=0 is am)
unsigned alarm : 1; // Alarm on/off LED.
unsigned digit1 : 2; // Hour MSD 7 segment ( 0 to 2 )
unsigned digit2 : 4; // Hour LSD 7 segment ( 0 to 9 )
unsigned digit3 : 3; // Minute MSD 7 segment ( 0 to 5 )
unsigned digit4 : 4; // minute LSD 7 segment ( 0 to 9 )
unsigned alarm1 : 2; // Alarm Hour MSD 7 segment ( 0 to 2 )
unsigned alarm2 : 4; // Alarm Hour LSD 7 segment ( 0 to 9 )
unsigned alarm3 : 3; // Alarm Minute MSD 7 segment ( 0 to 5 )
unsigned alarm4 : 4; // Alarm minute LSD 7 segment ( 0 to 9 )
};
void main(void) {
struct display d;
printf("Structure size: %i\n", (int) sizeof d);
}
Links
- IBM on C bitfields
- Using Bitfields Effectively (volatile example)