C++ 检查两个数的范围L到R的位是否互补

C++ 检查两个数的范围L到R的位是否互补

假设我们有两个非负数 x 和 y,以及两个值 L 和 R。我们需要判断给定的两个数在范围 L 到 R 的所有位是否互补。

在本文中,我们将学习如何判断两个数的范围 L 到 R 的位是否互补。

示例:

C++ 检查两个数的范围L到R的位是否互补

位数从右到左编号,从最不重要的位开始。

解决问题的步骤如下。

  • 获得 xor_value = x ^ y。
  • 判断 xor 值的范围 l 到 r 的所有位是否被设置。

上述策略的执行步骤如下。

C++ 程序:

// C++ code for checking whether all of the bits in a certain range of two numbers are complements
#include 
using namespace std;

bool GivenRange(unsigned int n,
                            unsigned int l,
                            unsigned int r)
{
    // The only set bits are those in the range l to r when calculating a number 'number' with 'r' number of bits
    int number = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1);

    // new number with one or more set bits in the range l to r and no other bits
    int new_number = n & number;

    // If both are equivalent, then all bits in the specified range are set.
    if (number == new_number)
        return true;

    // Otherwise, all bits are not set.
    return false;
}

// function that determines whether all of the bits in a given range of two numbers are complements of one another
bool bitsComplement(unsigned int x, unsigned int y,
                    unsigned int l, unsigned int r)
{
    unsigned int xor_value = x ^ y;
    return GivenRange(xor_value, l, r);
}

// Driver Code
int main()
{
    unsigned int x = 10, y = 5;
    unsigned int l = 1, r = 3;

    if (bitsComplement(x, y, l, r))
        cout << "Yes";
    else
        cout << "No";

    return 0;
}

输出:

Yes
  • 时间复杂度 将是 O(1)。

因为它执行的是常数时间操作。

  • 辅助空间 将是 O(1)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程