循环左移,但是默认的是无符号左移,那怎么办呢? 就左移的时候检查一下最高位是不是1,如果是1,咱们末尾给他补上就得了呗。用x << 1 | 1就可以给末尾补1且左移了。

所以,答案就是,两个数a,b,让b循环左移16次,如果16次内任何一次使得a和b相同了那么就输出YES。否则NO。

#include <iostream>
using namespace std;

int main() 
{
    unsigned short a, b;
    while (cin >> a >> b)
    {
        bool flag = false;
        for (int i = 0; i < 16; ++i)
        {
            if (b >> 15 & 1)
                b = b << 1 | 1;
            else
                b = b << 1;
            if (a == b)
            {
                flag = true;
                break;
            }
        }
        flag ? puts("YES") : puts("NO");
    }
}