Difference between revisions of "Bitfields programming"

From Teknologisk videncenter
Jump to: navigation, search
m
m (C and C++ programming)
Line 1: Line 1:
 
=C and C++ programming=
 
=C and C++ programming=
In the example below the complete structure will live in 4 bytes on a 32 bit memorysystem.
+
In the example below - Alarmclock data structure - the complete structure will live in 4 bytes on a 32 bit memorysystem.
 
<source lang=c>
 
<source lang=c>
 
#include <stdio.h>
 
#include <stdio.h>
Line 8: Line 8:
 
     unsigned pm    : 1;  // PM and AM leds. If 12 hour format pm or am (pm=0 is am)
 
     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 alarm  : 1;  // Alarm on/off LED.
     unsigned digit1 : 4;  // Hour MSD 7 segment
+
     unsigned digit1 : 4;  // Hour MSD 7 segment ( 0 to 9 )
     unsigned digit2 : 4;  // Hour LSD 7 segment
+
     unsigned digit2 : 4;  // Hour LSD 7 segment ( 0 to 9 )
     unsigned digit3 : 4;  // Minute MSD 7 segment
+
     unsigned digit3 : 4;  // Minute MSD 7 segment ( 0 to 9 )
     unsigned digit4 : 4;  // minute LSD 7 segment
+
     unsigned digit4 : 2;  // minute LSD 7 segment ( 0 to 2 )
     unsigned date   : 5;  // Date 1. to 31.
+
     unsigned alarm1 : 4;   // Alarm Hour MSD 7 segment ( 0 to 9 )
     unsigned month  : 4;  // Month 1 to 12
+
    unsigned alarm2 : 4;  // Alarm Hour LSD 7 segment ( 0 to 9 )
 +
     unsigned alarm3 : 4;  // Alarm Minute MSD 7 segment ( 0 to 9 )
 +
    unsigned alarm4 : 2;  // Alarm minute LSD 7 segment ( 0 to 2 )
 
};
 
};
  
Line 21: Line 23:
 
}
 
}
 
</source>
 
</source>
 +
 
=Links=
 
=Links=
 
*[http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=%2Fcom.ibm.vacpp6m.doc%2Flanguage%2Fref%2Fclrc03defbitf.htm IBM on C bitfields]
 
*[http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=%2Fcom.ibm.vacpp6m.doc%2Flanguage%2Fref%2Fclrc03defbitf.htm IBM on C bitfields]

Revision as of 08:34, 26 August 2012

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
    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 : 4;   // Hour MSD 7 segment ( 0 to 9 )
    unsigned digit2 : 4;   // Hour LSD 7 segment ( 0 to 9 )
    unsigned digit3 : 4;   // Minute MSD 7 segment ( 0 to 9 )
    unsigned digit4 : 2;   // minute LSD 7 segment ( 0 to 2 )
    unsigned alarm1 : 4;   // Alarm Hour MSD 7 segment ( 0 to 9 )
    unsigned alarm2 : 4;   // Alarm Hour LSD 7 segment ( 0 to 9 )
    unsigned alarm3 : 4;   // Alarm Minute MSD 7 segment ( 0 to 9 )
    unsigned alarm4 : 2;   // Alarm minute LSD 7 segment ( 0 to 2 )
};

void main(void) {
        struct display d;
        printf("Structure size: %i\n", (int) sizeof d);
}

Links