Page 129 - 6437
P. 129

Bit fiels

                          Suppose your C program contains a number of TRUE/FALSE variables grouped in a
                   structure called status, as follows:
                          This structure requires 8 bytes of memory space but in actual, we are going to store either

                 struct
                 {

                   unsigned int widthValidated;
                   unsigned int heightValidated;

                 } status;
                   0 or 1 in each of the variables. The C programming language offers a better way to utilize the
                   memory space in such situations.
                          If  you  are  using  such  variables  inside  a  structure,  then  you  can  define  the  width  of  a
                   variable which tells the C compiler that you are going to use only those number of bytes. For
                   example, the above structure can be rewritten as follows:
                          The above structure requires 4 bytes of memory space for status variable, but only 2 bits

                 struct
                 {
                   unsigned int widthValidated : 1;

                   unsigned int heightValidated : 1;

                 } status;
                   will be used to store the values.
                          If you will use up to 32 variables, each one with a width of 1 bit, then also the status
                   structure will use 4 bytes. However, as soon as you have 33 variables, it will allocate the next slot
                   of the memory and it will start using 8 bytes. Let us check the following example to understand
                   the concept:


                 #include <stdio.h>

                 #include <string.h>


                 /* define simple structure */
                 struct

                 {
                   unsigned int widthValidated;


















                                                                                                     132
   124   125   126   127   128   129   130   131   132   133   134