位运算
题目:给定两个无符号整数m,n,如果m可以由n通过循环位移得到,就输出yes,否则输出no。输入输出说明:
输入:
2 4
输出:
yes
m通过n循环位移得到这句话不理解,请大神指点一二,小弟感激不尽!
程序代码:#include<stdio.h>
int main()
{
unsigned int m,n;
scanf("%u%u",&m,&n);
if (m>n)
{
n^=m;//交换数字
m^=n;
n^=m;
}
while (m<n)
m<<=1;
if (n==m)
printf("Yes\n");
else
printf("No\n");
return 0;
}
[此贴子已经被作者于2017-1-1 01:10编辑过]

程序代码:#include<stdio.h>
int main()
{
unsigned int a=1;
unsigned int b=1;
unsigned int n=0,m=0;
int count=0;
while (a)//获取数位
{
a<<=1;
count++;
}
b<<=count-1;//获取最高位
scanf("%u%u",&n,&m);//输入两个数
while (count--)
{
if (n==m)
break;
if (n>=b)
{
n<<=1;
n|=1;
}
else
n<<=1;
}
if (n==m)
printf("Yes!\n");
else
printf("No!\n");
return 0;
}[此贴子已经被作者于2017-1-2 14:17编辑过]
