题目:、编写一个函数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;
}
请帮忙看下,谢谢了