任意のbit範囲を反転させる関数はどのようにすればいいでしょうか?

int rev_bit(unsigned n, int lower, int upper) {
}

int main(void) {
unsigned n = 0x32; /* 00110010 */

n = rev_bit(n, 1, 5); /* 1〜5bitの範囲を反転 */
printf("0x%x", n); /* 0x29 00101001 */

return 0;
}