C++ 和操作的最大值

C++ 和操作的最大值,c++,algorithm,C++,Algorithm,给定两个数字A和B。求对(p,Q)的值,使A>>B; 当b不是2的幂时,你认为答案是b&(b-1)这是错误的。假设b是(a假设很小)1001000,b-1是1000111,它们的and是1000000。但真正的答案是1000111和1000110之间的and 因此,如果是2的幂,则您的解决方案是正确的。 如果不是2的幂,那么答案应该是(b-1)和(b-2)如果b不是奇数,否则b和(b-1)。 (除了只有两个数字时的角情况,即ifa=b-1)这段代码是用python编写的,但是您可以检查这个问题是

给定两个数字A和B。求对(p,Q)的值,使A>>B;
b不是2的幂时,你认为答案是b&(b-1)这是错误的。假设b是(a假设很小)1001000b-11000111,它们的and是1000000。但真正的答案是10001111000110之间的and 因此,如果是2的幂,则您的解决方案是正确的。
如果不是2的幂,那么答案应该是(b-1)和(b-2)如果b不是奇数,否则b和(b-1)
(除了只有两个数字时的角情况,即ifa=b-1

这段代码是用python编写的,但是您可以检查这个问题是如何工作的逻辑

T=int(input())
    for i in range(T):
        A,B=list(map(int,input().split()))
        if(B%2==0):
            ans=B-2;
        else:
            ans=B-1;
        if(ans>=A):
            print(ans)
        else:
            print(A&B)

使用调试器时,哪一行会导致问题?最好将其发布到CodeReview@StackExchange.com
int main()
{
    int t;
    cin>>t;
    while(t--){
        long long int nearpow =0;
        int count=1;
        int a ; int b;
        cin>>a>>b;

        while(nearpow<=b){

            nearpow = 1<<count;
            count++;

        }
        nearpow/=2;

        if(nearpow==b){
            long long int x = b-1;
            long long int y = b-2;
            if(y>=a) cout<<(x&y)<<endl;
            else cout<<(b&x)<<endl;
        }else{
            long long int max=0;
            cout<<(b&(b-1))<<endl;

        }

    }
    return 0;
}
T=int(input())
    for i in range(T):
        A,B=list(map(int,input().split()))
        if(B%2==0):
            ans=B-2;
        else:
            ans=B-1;
        if(ans>=A):
            print(ans)
        else:
            print(A&B)