SPRUI04G June 2015 – August 2025
Bit fields are the only objects that are packed within a byte. That is, two bit fields can be stored in the same byte. Bit fields can range in size from 1 to 64 bits in C or larger in C++.
For big-endian mode, bit fields are packed into registers from most significant bit (MSB) to least significant bit (LSB) in the order in which they are defined. Bit fields are packed in memory from most significant byte (MSbyte) to least significant byte (LSbyte). For little-endian mode, bit fields are packed into registers from the LSB to the MSB in the order in which they are defined, and packed in memory from LSbyte to MSbyte.
The size, alignment, and type of bit fields adhere to these rules:
struct st
{
int a:4
};This struct uses up 4 bytes and is aligned at 4 bytes.
struct st
{
char a:4;
int :22;
};This struct uses 4 bytes and is aligned at a 4-byte boundary.
Table 8-2 illustrates bit-field packing, using the following bit field definitions:
struct{
int A:7
int B:10
int C:3
int D:2
int E:9
}x;A0 represents the least significant bit of the field A; A1 represents the next least significant bit, etc. Again, storage of bit fields in memory is done with a byte-by-byte, rather than bit-by-bit, transfer.
| Big-endian register | |||||||||||||||||||||||||||||||
| MS | LS | ||||||||||||||||||||||||||||||||||
| A | A | A | A | A | A | A | B | B | B | B | B | B | B | B | B | B | C | C | C | D | D | E | E | E | E | E | E | E | E | E | X | ||||
| 6 | 5 | 4 | 3 | 2 | 1 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 2 | 1 | 0 | 1 | 0 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | X | ||||
| 31 | 0 | ||||||||||||||||||||||||||||||||||
| Big-endian memory | |||||||||||||||||||||||||||||||
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| A | A | A | A | A | A | A | B | B | B | B | B | B | B | B | B | B | C | C | C | D | D | E | E | E | E | E | E | E | E | E | X | ||||||||||||||||||||||||||||
| 6 | 5 | 4 | 3 | 2 | 1 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 2 | 1 | 0 | 1 | 0 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | X | ||||||||||||||||||||||||||||
| Little-endian register | |||||||||||||||||||||||||||||||
| MS | LS | ||||||||||||||||||||||||||||||||||
| X | E | E | E | E | E | E | E | E | E | D | D | C | C | C | B | B | B | B | B | B | B | B | B | B | A | A | A | A | A | A | A | ||||
| X | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 1 | 0 | 2 | 1 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
| 31 | 0 | ||||||||||||||||||||||||||||||||||
| Little-endian memory | |||||||||||||||||||||||||||||||
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| B | A | A | A | A | A | A | A | B | B | B | B | B | B | B | B | E | E | D | D | C | C | C | B | X | E | E | E | E | E | E | E | ||||||||||||||||||||||||||||
| 0 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 1 | 0 | 1 | 0 | 2 | 1 | 0 | 9 | X | 8 | 7 | 6 | 5 | 4 | 3 | 2 | ||||||||||||||||||||||||||||
| LEGEND: X = not used, MS = most significant, LS = least significant | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||