C++ 检查两个数的范围L到R的位是否互补
假设我们有两个非负数 x 和 y,以及两个值 L 和 R。我们需要判断给定的两个数在范围 L 到 R 的所有位是否互补。
在本文中,我们将学习如何判断两个数的范围 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)。