C语言提问,啊啊!

CloudStrifers 2011-04-27 10:15:34
键盘上读入一个16进制无符号数m,调用函数rightrot将m中的原始数据循环右移n位。并输出移位前后的内容。
...全文
324 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-04-28
  • 打赏
  • 举报
回复
可能用内嵌汇编更简单
unsigned int ROR(unsigned int v,int n) {
__asm {
push ecx
mov eax,v
mov ecx,n
ror eax,cl
pop ecx
}
}
keshuichonglx 2011-04-28
  • 打赏
  • 举报
回复
代码中乱码部分是中文“原始数据”和“新数据”,楼主记得给分
keshuichonglx 2011-04-28
  • 打赏
  • 举报
回复
DWORD rightrot(DWORD aa , DWORD yiwei) ;

int main(int argc, char* argv[])
{
DWORD aa , bb ;
scanf( "%x" , &aa ) ;
bb = rightrot( aa , 2 ) ;
printf( "ԭʼÊý¾Ý=0x%x,ÐÂÊý¾Ý=0x%x\n" , aa , bb ) ;
return 0;
}

DWORD rightrot(DWORD aa , DWORD yiwei)
{
yiwei %= 32 ;
return ( (aa >> yiwei) | (aa << (31 - yiwei)) ) ;
}
wudizuijimo 2011-04-28
  • 打赏
  • 举报
回复
/*2-8 编写一个函数rightrot(x,n),
返回将循环右移n个二进制位后的值*/
#include <stdio.h>
unsigned rightrot(unsigned x,int n);
main()
{
unsigned a=23;
printf("%d\n",rightrot(a,3));
system("pause");
}

unsigned rightrot(unsigned x,int n)
{
unsigned a,b;
int i,num=0;
a=x;
b=x;
while((a/=2) > 0)
{
num++;
}
for(i=0;i<n;++i)
{
if(b%2 != 0)
b = (b>>1) + (1<<num);
else
b = b>>1;
}
return b;
}



网上找的

70,025

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧