不转换为二进制,直接用位运算实现循环移位

实现16位二进制的循环移位,可以先判断移出位是否为1,然后将原数字左移1位,再加上移出位,之后和0xffff进行与操作,取低16位。最多循环16次即可得出结果

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main(void){
    
    int a, b;
    const int MASK1 = 0xffff, MASK2=0x8000;
    
    while(cin>>a>>b){
        int in=0;
        bool flag = false;
        if(a > b){
            swap(a, b);
        }
        for(int i=0; i<16; i++){
            if(a == b){
                flag = true;
                break;
            }
            in = (a>>15)&1;
            a = ((a<<1) + in)&MASK1;
        }
        if(flag){
            cout<<"YES"<<endl;
        }else{
            cout<<"NO"<<endl;
        }
    }
    
    return 0;
}