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

本文概述

  • C ++
  • Java
  • Python 3
  • C#
  • 的PHP
给定两个非负数a和b,以及两个值l和r,问题是检查两个给定数中l到r范围内对应位置的所有位是否互为补位。
这些比特位从右到左编号, 即, 最低有效比特wei被认为在第一位置。
例子:
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 = https://www.lsbin.com/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 = https://www.lsbin.com/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 = https://www.lsbin.com/a ^ b return allBitsSetInTheGivenRange(xor_value, l, r)# Driver Code if __name__ = ="__main__" :a = 10 b = 5 l = 1 r = 3if (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 = https://www.lsbin.com/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 = https://www.lsbin.com/$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 ?>

【检查两个数字从L到R的位是否彼此互补】输出如下:
Yes

    推荐阅读