关于移位的一道题目,帮忙看下问题出在哪里了?
函数原型: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;
}
请帮忙看下,谢谢了
相关推荐
移位寄存器 串入并出 并入串出.pdf
单片机移位寄存器 串入并出 并入串出讲解............
4位串入并出移位寄存器
实验五4位串入并出移位寄存器,VHDL实验报告
移位寄存器串入并出与并入串出
移位寄存器串入并出与并入串出 在数字电路中,移位寄存器(英语:shift register)是一种在若干相同时间脉冲下工作的触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。这种移位寄存器是一维的,事实上还有多维的移位寄存器,即输入、输出的数据本身就是一些列位。实现这种多维移位寄存器的方法可以是将几个具有相同位数的移位寄存器并联起来。 移位寄存器的输入、输出都可以是并行或串行的。它们经常被配置成串入并出(serial-in, parallel-out, SIPO)的形式或并入串出(parallel-in, seri
基于51单片机实现74LS164串入并出移位寄存器
对于串入并出移位寄存器以下是我个人的理解和实际开发工程中得出的经验。一个8位串入数据输入, 8位并行输出。可以看出先移的是高位,就是第一个位进去的到最后会在最高位。
基于字符串移位包含的问题详解
代码如下所示: 代码如下:/************************************************************************//* 给定两个字符串s1和s2,要求判定s2是否能被s1做循环移位得到的字符串所包含例如,给定s1 = AABCD, s2 = CDAA,返回true,给定s1 = ABCD, s2 = ACBD,返回false*//************************************************************************/#include “stdafx.h”#include <io


