Bit-field Flags Demo

Bit-field Flags Demo

Hard C Structures 31 views
Explanation Complexity

Problem Statement

Structure with 5 different status flags stored (isActive, isPaid, isVerified, etc.) using bit-fields. Memory saving calculated using vs normal approach.

Input Format

No user input.
A structure is defined using status flags.

Output Format

Memory usage comparison:

• Normal structure

• Bit-field structure

Example

Status flags:
isActive, isPaid, isVerified, isAdmin, isBlocked
Normal structure size  = 20 bytes
Bit-field structure size = 4 bytes
Memory saved = 16 bytes

Constraints

• Total flags = 5

• Each flag stores only true/false

Concept Explanation

Each status flag needs only 1 bit (0 or 1).
Using normal int variables wastes memory.
Bit-fields store flags in bits, saving memory.

Step-by-Step Explanation

Normal Approach

1.Create a structure with 5 int variables.

2.Each int takes 4 bytes.

3.Total memory used:

• 5 × 4 = 20 bytes.

Bit-field Approach

1.Create a structure with 5 bit-fields of size 1.

2.Each flag uses 1 bit.

3.Total bits used:

• 5 bits.

4.These bits fit inside 1 integer (4 bytes).

Memory Saving

1.Normal structure size = 20 bytes.

2.Bit-field structure size = 4 bytes.

3.Memory saved = 16 bytes.

Concept Explanation

Each status flag needs only 1 bit (0 or 1).
Using normal int variables wastes memory.
Bit-fields store flags in bits, saving memory.

Step-by-Step Explanation

Normal Approach

1.Create a structure with 5 int variables.

2.Each int takes 4 bytes.

3.Total memory used:

• 5 × 4 = 20 bytes.

Bit-field Approach

1.Create a structure with 5 bit-fields of size 1.

2.Each flag uses 1 bit.

3.Total bits used:

• 5 bits.

4.These bits fit inside 1 integer (4 bytes).

Memory Saving

1.Normal structure size = 20 bytes.

2.Bit-field structure size = 4 bytes.

3.Memory saved = 16 bytes.

Input / Output Format

Input Format
No user input.
A structure is defined using status flags.
Output Format
Memory usage comparison:

• Normal structure

• Bit-field structure
Constraints
• Total flags = 5

• Each flag stores only true/false

Examples

Input:
Status flags: isActive, isPaid, isVerified, isAdmin, isBlocked
Output:
Normal structure size = 20 bytes Bit-field structure size = 4 bytes Memory saved = 16 bytes

Example Solution (Public)

C
#include <stdio.h>

// Structure with bit-fields (1 bit each)
struct StatusBitField {
    unsigned int isActive   : 1;
    unsigned int isPaid     : 1;
    unsigned int isVerified : 1;
    unsigned int isAdmin    : 1;
    unsigned int isBanned   : 1;
};

// Normal structure (no bit-fields)
struct StatusNormal {
    unsigned int isActive;
    unsigned int isPaid;
    unsigned int isVerified;
    unsigned int isAdmin;
    unsigned int isBanned;
};

int main() {
    struct StatusBitField sBit;
    struct StatusNormal sNormal;

    printf("Size of structure with bit-fields: %lu bytesn", sizeof(sBit));
    printf("Size of normal structure: %lu bytesn", sizeof(sNormal));

    // Example of setting values
    sBit.isActive = 1;
    sBit.isPaid = 0;
    sBit.isVerified = 1;
    sBit.isAdmin = 0;
    sBit.isBanned = 0;

    printf("nBit-field values:n");
    printf("isActive: %un", sBit.isActive);
    printf("isPaid: %un", sBit.isPaid);
    printf("isVerified: %un", sBit.isVerified);
    printf("isAdmin: %un", sBit.isAdmin);
    printf("isBanned: %un", sBit.isBanned);

    return 0;
}

Official Solution Code

#include <stdio.h>

// Structure with bit-fields (1 bit each)
struct StatusBitField {
    unsigned int isActive   : 1;
    unsigned int isPaid     : 1;
    unsigned int isVerified : 1;
    unsigned int isAdmin    : 1;
    unsigned int isBanned   : 1;
};

// Normal structure (no bit-fields)
struct StatusNormal {
    unsigned int isActive;
    unsigned int isPaid;
    unsigned int isVerified;
    unsigned int isAdmin;
    unsigned int isBanned;
};

int main() {
    struct StatusBitField sBit;
    struct StatusNormal sNormal;

    printf("Size of structure with bit-fields: %lu bytesn", sizeof(sBit));
    printf("Size of normal structure: %lu bytesn", sizeof(sNormal));

    // Example of setting values
    sBit.isActive = 1;
    sBit.isPaid = 0;
    sBit.isVerified = 1;
    sBit.isAdmin = 0;
    sBit.isBanned = 0;

    printf("nBit-field values:n");
    printf("isActive: %un", sBit.isActive);
    printf("isPaid: %un", sBit.isPaid);
    printf("isVerified: %un", sBit.isVerified);
    printf("isAdmin: %un", sBit.isAdmin);
    printf("isBanned: %un", sBit.isBanned);

    return 0;
}
Please login to submit solutions.
Editor
Output

                                        
Please login to submit solutions.