怎么用C语言实现32位变量的循环移位

如何用C语言实现32位变量的循环移位?
最近看《ARM体系结构与编程》(杜春雷编)的时候,看到了立即数的生成方法,为了更加理解生成的过程,我想写一个程序简单的计算如何生成一个立即数。下面是我写的程序:
#include<stdio.h>
main()
{
unsigned int immed_8, rotate_imm, i;
immed_8 = 0x1;
rotate_imm = 0x1;

for(i = 0; i < (rotate_imm*2); i++)
{
if (immed_8 & 0x01){
immed_8 >>= 1;
immed_8 |= 0x80;
}
else{
immed_8 >>= 1;
}
}
printf("The result is 0x%x\n",immed_8);

return 0;
}

我的本意是结果生成:The result is 0x4000,但是上述程序运行的结果为0x40.求大侠指点!感激不尽……

------解决方案--------------------
循环两次, 第一次执行if体,第二次执行else体。

if :
immed_8 >>= 1; // immed_8右移一位,再存入immed_8, 0x1 >> 1 = 0x0
immed_8 |= 0x80; // immed_8 = 0x80


else: //此时immed_8 = 0x80
immed_8 >>= 1; // immed_8 右移1位,当然是 0x40了


LZ有问题吗? 

立即数是指操作数是直接在opcode中,读入指令的时候电路就有那个值的状态了,不需要读取寄存器或Memory,不是你这么生成的。

------解决方案--------------------
C/C++ code

immed_8 |= 0x80;
//改成
immed_8 |= 0x8000;