位运算
题目:给定两个无符号整数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编辑过]