printBits('A') の出力は 0100 0001 であると想定されますが、0100 0001 0100 1101 0000 0000 を取得しています。以下のコードで問題を理解できないようです。
unsigned char getBit(unsigned char c, int n) {
return c=(c&(1<<n))>>n;
}
void printBits(unsigned char c) {
int i=7;
while(i>=0){
printf("%d", (getBit(c,i--);
}
}