第1个回答 2018-05-11
//本程序的作用是将一个正整数m,如果n>0则将循环左移n位,如果n>0则将m循环右移n位,否则不移动
unsigned int m;
int n;
unsigned int temp = -1; //temp取unsinged int 的最大值
scanf("%u%d", &m, &n); //从键盘得到移位的数据
printf("m=%#x\tn=%#x\n", m, n); //显示刚刚输入的数据,以十六进制形式,带0x
n %= sizeof(unsigned int) * 8; //如果移位的位数超过最大位数unsigned int的总位 //数,则相当于循环一轮
if (n > 0) //左移
{
temp = (temp&m) >> (sizeof(m) * 8 - n); //得到移出去的数据
m = m << n;
m = m | temp; //将移出去的数据补回来
}
else if (n < 0) //右移
{
n = -n;
temp = (temp&m) << (sizeof(m) * 8 - n);//得到移出去的数据
m = m >> n;
m = m | temp;//将移出去的数据补回来 。
}
printf("m=%#x\n", m); //将移位后的m显示