题解 | #位操作练习#
位操作练习
https://www.nowcoder.com/practice/7bdc346ca39841f6a05f73d98477621d
#include<bits/stdc++.h> using namespace std; //函数用于判断num1的16位二进制表示形式是否能由num2经过循环左移得到 bool can_be_shifted(unsigned short num1, unsigned short num2) { //遍历所有可能的循环左移位数 for (int shift = 0; shift < 16; shift++) { if (num2 >> 15 & 1) { num2 = num2 << 1 | 1;//循环左移时检查最高位是否为1,如果是,则在末位补上1 } else { num2 = num2 << 1;//最高位不是1,直接左移 } //如果经过循环左移后的结果等于num1,则返回true if (num2 == num1) { return true; } } //如果num2不能经过循环左移得到num1,则返回false return false; } int main() { unsigned short num1, num2; while (cin >> num1 >> num2) { if (can_be_shifted(num1, num2)) { cout << "YES" << endl; } else { cout << "NO" << endl; } } }