# 检查两个数字从L到R的位是否彼此互补

2021年4月23日17:04:40 发表评论 515 次浏览

## 本文概述

``````Input: a = 10, b = 5
l = 1, r = 3
Output: Yes
(10)10 = (1010)2
(5)10 = (101)2 = (0101)2
All the bits in the range 1 to 3 are complement of each other.

Input: a = 21, b = 13
l = 2, r = 4
Output: No
(21)10 = (10101)2
(13)10 = (1101)2 = (1101)2
All the bits in the range 2 to 4 are not complement of each other.``````

• 计算异或值= a ^ b。
• 检查所有位是否都设置在范围内升to[Rin异或值。参考这个发布。

## C ++

``````//C++ implementation to check
//whether all the bits in the given range
//of two numbers are complement of each other
#include <bits/stdc++.h>
using namespace std;

//function to check whether all the bits
//are set in the given range or not
bool allBitsSetInTheGivenRange(unsigned int n, unsigned int l, unsigned int r)
{
//calculating a number 'num' having 'r'
//number of bits and bits in the range l
//to r are the only set bits
int num = ((1 <<r) - 1) ^ ((1 <<(l - 1)) - 1);

//new number which will only have one or more
//set bits in the range l to r and nowhere else
int new_num = n & num;

//if both are equal, then all bits are set
//in the given range
if (num == new_num)
return true ;

//else all bits are not set
return false ;
}

//function to check whether all the bits in the given range
//of two numbers are complement of each other
bool bitsAreComplement(unsigned int a, unsigned int b, unsigned int l, unsigned int r)
{
unsigned int xor_value = a ^ b;
return allBitsSetInTheGivenRange(xor_value, l, r);
}

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

if (bitsAreComplement(a, b, l, r))
cout <<"Yes" ;
else
cout <<"No" ;

return 0;
}``````

## Java

``````//Java implementation to check
//whether all the bits in the
//given range of two numbers
//are complement of each other
class GFG
{
//function to check whether
//all the bits are set in
//the given range or not
static boolean allBitsSetInTheGivenRange( int n, int l, int r)
{
//calculating a number 'num'
//having 'r' number of bits
//and bits in the range l
//to r are the only set bits
int num = (( 1 <<r) - 1 ) ^
(( 1 <<(l - 1 )) - 1 );

//new number which will only
//have one or more set bits
//in the range l to r and
//nowhere else
int new_num = n & num;

//if both are equal, //then all bits are set
//in the given range
if (num == new_num)
return true ;

//else all bits are not set
return false ;
}

//function to check whether all
//the bits in the given range
//of two numbers are complement
//of each other
static boolean bitsAreComplement( int a, int b, int l, int r)
{
int xor_value = a ^ b;
return allBitsSetInTheGivenRange(xor_value, l, r);
}

//Driver Code
public static void main(String []args)
{
int a = 10 , b = 5 ;
int l = 1 , r = 3 ;

if (bitsAreComplement(a, b, l, r))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}

//This code is contributed by Smitha``````

## Python 3

``````# Python 3 implementation to check whether
# all the bits in the given range of two
# numbers are complement of each other

# function to check whether all the bits
# are set in the given range or not
def allBitsSetInTheGivenRange(n, l, r):

# calculating a number 'num' having 'r'
# number of bits and bits in the range l
# to r are the only set bits
num = (( 1 <<r) - 1 ) ^ (( 1 <<(l - 1 )) - 1 )

# new number which will only have one
# or more set bits in the range l to r
# and nowhere else
new_num = n & num

# if both are equal, then all bits
# are set in the given range
if (num = = new_num):
return True

# else all bits are not set
return False

# function to check whether all the bits
# in the given range of two numbers are
# complement of each other
def bitsAreComplement(a, b, l, r):
xor_value = a ^ b
return allBitsSetInTheGivenRange(xor_value, l, r)

# Driver Code
if __name__ = = "__main__" :

a = 10
b = 5
l = 1
r = 3

if (bitsAreComplement(a, b, l, r)):
print ( "Yes" )
else :
print ( "No" )

# This code is contributed by ita_c``````

## C#

``````//C# implementation to check
//whether all the bits in the
//given range of two numbers
//are complement of each other
using System;

class GFG
{
//function to check whether
//all the bits are set in
//the given range or not
static bool allBitsSetInTheGivenRange( int n, int l, int r)
{
//calculating a number 'num'
//having 'r' number of bits
//and bits in the range l
//to r are the only set bits
int num = ((1 <<r) - 1) ^
((1 <<(l - 1)) - 1);

//new number which will only
//have one or more set bits
//in the range l to r and
//nowhere else
int new_num = n & num;

//if both are equal, //then all bits are set
//in the given range
if (num == new_num)
return true ;

//else all bits are not set
return false ;
}

//function to check whether all
//the bits in the given range
//of two numbers are complement
//of each other
static bool bitsAreComplement( int a, int b, int l, int r)
{
int xor_value = a ^ b;
return allBitsSetInTheGivenRange(xor_value, l, r);
}

//Driver Code
static public void Main ()
{
int a = 10, b = 5;
int l = 1, r = 3;

if (bitsAreComplement(a, b, l, r))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}

//This code is contributed
//by Ajit Deshpal.``````

## 的PHP

``````<?php
//PHP implementation to check
//whether all the bits in the
//given range of two numbers
//are complement of each other

//function to check whether
//all the bits are set in
//the given range or not
function allBitsSetInTheGivenRange( \$n , \$l , \$r )
{

//calculating a number
//'num' having 'r' number
//of bits and bits in
//the range l to r are
//the only set bits
\$num = ((1 <<\$r ) - 1) ^
((1 <<( \$l - 1)) - 1);

//new number which will
//only have one or more
//set bits in the range
//l to r and nowhere else
\$new_num = ( \$n & \$num );

//if both are equal, //then all bits are set
//in the given range
if ( \$num == \$new_num )
return true;

//else all bits
//are not set
return false;
}

//function to check whether
//all the bits in the given range
//of two numbers are complement
//of each other
function bitsAreComplement( \$a , \$b , \$l , \$r )
{
\$xor_value = \$a ^ \$b ;
return allBitsSetInTheGivenRange( \$xor_value , \$l , \$r );
}

//Driver Code
\$a = 10;
\$b = 5;
\$l = 1;
\$r = 3;
if (bitsAreComplement( \$a , \$b , \$l , \$r ))
echo "Yes" ;
else
echo "No" ;

//This Code is Contributed by ajit
?>``````

``Yes``