Bits Shift in C- is the i bit on?
===

I'm trying to understand the following function which decides whether a bit is on:

    int isBitISet( char ch, int i )
      }
       char mask = 1 << i ;
       return mask & ch ;
       }

First, why do I get a char? for `ch=abcdefgh` and `i=5` the function suppose to return the fifth bit from the right (?) , `d`. so  `mask=00000001<<5=00100000`, and `00100000 & abcdefgh = 00c00000`.

Can you please explain me how come we get char and we can do all these shifts without any casting? how come we didn't get the fifth bit and why the returned value is really the Indication whether the bit is on or not?  
