I'm not sure understand what you are wanting to do.
Are you wanting to move bit 5 to where bit 3 is, setting bit 5 to zero in the result? (count bits starting from: 0 is the rightmost one)
1. If so, first you want to get the original value with the desired bits zeroed out.
2. Next you want get the desired bit isolated and shift it along.
3. Lastly you want to combine that bit with the value from step 1.
Some code for this:
Code:
unsigned int a = input & ~0x28; // 0x28 => 00101000 where those 1's are the bits we want cleared
unsigned int b = (input & 0x20) >> 2; // 0x20 => 00100000 where the 1 is the bit we want to isloate
output = a | b;
Or as a one-liner:
Code:
output = (input & ~0x28) | ((input & 0x20) >> 2);