title: Bit fields for reading from H/W registers
body: <p>I want to read the 2nd, 5th and the 6th bit from a 32-bit register.  I have decided to use struct bit fields to store them.  Is the following data structure correct?</p>
  
  <pre><code>struct readData
  {
      int unwanted:1;
      int reqbit1:1;
      int unwanted1:2;
      int reqbit2:2;
      int unwanted2:26;
  };
  </code></pre>
  
  <p>I'm not sure about how the bit fields are created. I'm going to use an API that will copy bytes from the h/w register to this structure directly.  In that case, will reqbit1 contain the 2nd bit? As per my understanding, the compiler allots the first bit to an int variable and the 2nd bit is alloted to another int variable and so the reqbit1 won't have any data read from the register.  Isn't the following union more suitable for this situation?</p>
  
  <pre><code>union readData
  {
      struct readBits
      {
          bool unwanted:1;
          bool reqbit1:1;
          xxx unwanted1:2;
          short reqbit2:2;
          xxx unwanted2:26;
      };
  
      int regValue;
  };
  </code></pre>
  
  <p>If this is right, what should I declare unwanted2 as? </p>