关于移位的一道题目,帮忙看下问题出在哪里了?

ryangio 2010-04-05 12:36:25
题目:、编写一个函数setbits(x, p, n, y),该函数返回对x执行下列操作后的结果值:将x中从第p位(从低位到高位顺序)开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。
函数原型:unsigned setbits(unsigned x, int p, int n, unsigned y);

下面是代码:

#include "stdio.h"

int getbit(unsigned x, int n);
unsigned setbit1(unsigned x, int n);
unsigned setbit0(unsigned x, int n);
int setbits(unsigned x, int p, int n, unsigned y);

int main()
{
unsigned a, b;
int m,n;
printf("a=?\n");
scanf("%d",&a);
printf("\nb=?\n");
scanf("%d",&b);
printf("m=? n=?\n");
scanf("%d %d",&m,&n);
a = setbits(a,m,n,b);
printf("\nThe changed a = %d\n", a);
}

int setbits(unsigned x, int p, int n, unsigned y)
{
int i;
unsigned tmp;
for(i=1; i<=n; i++,p++) {
tmp=y;
if(getbit(tmp,i)==1) {
x=setbit1(x,p);
}
else {
x=setbit0(x,p);
}
}
return x;
}


int getbit(unsigned x, int n)
{
x = (x&&(1<<(n-1)))>>(n-1);
if(x==1)
return 1;
else
return 0;
}

unsigned setbit1(unsigned x, int n)
{
x = x||(1<<(n-1));
return x;
}

unsigned setbit0(unsigned x, int n)
{
x = x&&(~(1<<(n-1)));
return x;
}

请帮忙看下,谢谢了
...全文
65 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
帅得不敢出门 2010-04-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 localxiao 的回复:]
scanf("%d %d",&m,&n); // mark

程序没看,但是这里的格式化输入格式应该有点小问题

输入m,n的时候,要求 m - 空格 - 空格 - n
[/Quote]
scanf("%d%d",&m,&n); //m - 空格- n
localxiao 2010-04-05
  • 打赏
  • 举报
回复
scanf("%d %d",&m,&n); // mark

程序没看,但是这里的格式化输入格式应该有点小问题

输入m,n的时候,要求 m - 空格 - 空格 - n
ForestDB 2010-04-05
  • 打赏
  • 举报
回复
问题出在哪里了?
有没有先跟踪下?

69,382

社区成员

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

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