1  unsigned
       2  good (unsigned src, unsigned o5, unsigned w5)
       3  {
       4    return src & ~((w5 == 0) ? (~0 << o5) : (1 << o5));
       5  }
       6  
       7  unsigned
       8  bad (unsigned src, unsigned o5, unsigned w5)
       9  {
      10    return src & ((w5 == 0) ? ~(~0 << o5) : ~(1 << o5));
      11  }
      12