#include<stdio.h>
#include<ctype.h>
#include<math.h>
#include<malloc.h>

unsigned int t;


unsigned int extract_right_most(unsigned int y, int n)
{
unsigned int temp;
y=y<<(t-n);
temp=y>>(t-n);

return(temp);
}

unsigned int extract_left_most(unsigned int x, int n)
{
unsigned int temp;
temp=x>>(t-n);

return(temp);
}

bitsearch(unsigned int x, unsigned int y, int n)
{
unsigned int z1,z2;

int i, index[32], k=0, count=0;
z1=extract_right_most(y,n);
z2=extract_left_most(x,n);

while(count<=(t-n))
{
if(z2==z1)
{
index[k++]=count;
}
x=x<<1;
z2=extract_left_most(x,n);
count=count+1;
}

if(k==0)
printf("Not Found\n");
else
{
printf("Found in the following places\n");
for(i=0;i<k;i++)
printf("%d \n",(t-1)-index[i]);
}

}



int main(void)
{
unsigned int x=0x1234;
unsigned int y=0x4321;
unsigned int n=4;

t=8*sizeof(unsigned int);
printf("%d \n",extract_right_most(y,n));
printf("%d \n",extract_left_most(y,n));
bitsearch(x,y,n);
return(0);
}


