【求教+讨论】疑惑,这段代码错哪了?
代码如下/*
输入2个整数i、j,若j大于0,把i循环左移j位(所谓循环就是,假设左边溢出,则补到右边,
反之亦然),若j小于0,则i循环右移j位,然后将循环过的i以16进制输出,以便查看正误。
*/
#include<stdio.h>
#include<conio.h>
int main()
{
int i,j,temp;
printf("请输入您要移位的正整数 :");
scanf("%d",&i);
printf("请输入您要循环移位的位数(负数代表左移,正数代表右移): ");
scanf("%d",&j);
printf("您要移位的数字为%d,其十六进制为0x%x.\n\n",i,i);
if(j==0)
{
printf("没有移位。按任意键退出。");
getch();
return -1;
}
if(j>0)
{
printf("左移%d位...\n\n",j);
temp=i>>(32-j);
i<<=j;
i|=temp;
}
else
{
j=-j;
printf("右移%d位...\n\n",j);
temp=i<<(32-j);
i>>=j;
i|=temp;
}
printf("移位后的值为%d,十六进制为0x%x\n\n",i,i);
printf("按任意键退出.");
getch();
return 0;
}
原题是:编写一个程序,输入两个整数i和j,如过j>0, 则把i循环左移j位;如果j<0,则把i循环右移j位,最后输出i的值。
程序前面的注释是我自己理解的题意,不知道对不对。
运行的图片我截了一个,如下(怎么不能带附件了?我一个字一个字打吧)
*******************************************************************************************************************
*请输入您要移位的正整数:2748 *
*请输入您要循环移位的位数(负数代表左移,正数代表右移):-4 *
*您要移位的数字为2748,其十六进制为0xabc *
* *
*右移4位... *
* *
*移位后的值为-1073741653,十六进制为0xc00000ab *
* *
*按任意键退出. *
*******************************************************************************************************************
我预期的结果是(十六进制:0xbca)
疑惑不解~~~~~~~~~~~~~~~~~~~~~~
[ 本帖最后由 rayOMG 于 2010-10-14 15:39 编辑 ]