Bitfields programming

From Teknologisk videncenter
Jump to: navigation, search

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