Dado un número no negativo n y dos valores l y r . El problema es comprobar si todos los bits están desactivados o no en el rango de l a r en la representación binaria de n . Los bits se numeran de derecha a izquierda, es decir, se considera que el bit menos significativo está en la primera posición.
Restricción: 1 <= l <= r <= número de bits en la representación binaria de n .
Ejemplos:
Input : n = 17, l = 2, r = 4 Output : Yes (17)10 = (10001)2 The bits in the range 2 to 4 are all unset. Input : n = 39, l = 4, r = 6 Output : No (39)10 = (100111)2 The bits in the range 4 to 6 are all not unset.
Enfoque: Los siguientes son los pasos:
- Calcular num = ((1 << r) – 1) ^ ((1 << (l-1)) – 1). Esto producirá un número num que tiene un número r de bits y los bits en el rango de l a r son los únicos bits establecidos.
- Calcula new_num = n & num.
- Si new_num == 0, devuelve «Sí» (todos los bits están desactivados en el rango dado).
- De lo contrario, devuelve «No» (todos los bits no están desactivados en el rango dado).
C++
// C++ implementation to check whether all the bits // are unset in the given range or not #include <bits/stdc++.h> using namespace std; // function to check whether all the bits // are unset 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 could only have one or more // set bits in the range l to r and nowhere else int new_num = n & num; // if true, then all bits are unset // in the given range if (new_num == 0) return true; // else all bits are not unset // in the given range return false; } // Driver program to test above int main() { unsigned int n = 17; unsigned int l = 2, r = 4; if (allBitsSetInTheGivenRange(n, l, r)) cout << "Yes"; else cout << "No"; return 0; }
Java
// Java implementation to check // whether all the bits are // unset in the given range or not class GFG { // function to check whether // all the bits are unset 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 could only // have one or more set bits in // the range l to r and nowhere else int new_num = n & num; // if true, then all bits are // unset in the given range if (new_num == 0) return true; // else all bits are not // unset in the given range return false; } // Driver Code public static void main(String[] args) { int n = 17; int l = 2, r = 4; if (allBitsSetInTheGivenRange(n, l, r)) System.out.println("Yes"); else System.out.println("No"); } } // This code is contributed // by Smitha
Python3
# Python3 implementation to # check whether all the bits # are unset in the given # range or not # function to check whether # all the bits are unset 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 could only # have one or more set bits in # the range l to r and nowhere else new_num = n & num # if true, then all bits are # unset in the given range if (new_num == 0): return True # else all bits are not # unset in the given range return false # Driver Code n = 17 l = 2 r = 4 if (allBitsSetInTheGivenRange(n, l, r)): print("Yes") else: print("No") # This code is contributed # by Smitha
C#
// C# implementation to check // whether all the bits are // unset in the given range or not using System; class GFG { // function to check whether // all the bits are unset 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 could // only have one or more // set bits in the range // l to r and nowhere else int new_num = n & num; // if true, then all // bits are unset // in the given range if (new_num == 0) return true; // else all bits are not // unset in the given range return false; } // Driver Code public static void Main() { int n = 17; int l = 2, r = 4; if (allBitsSetInTheGivenRange(n, l, r)) Console.Write("Yes"); else Console.Write("No"); } } // This code is contributed // by Smitha
PHP
<?php // PHP implementation to check // whether all the bits are // unset in the given range or not // function to check whether // all the bits are unset 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 could only // have one or more set bits in // the range l to r and nowhere else $new_num = $n & $num; // if true, then all bits are // unset in the given range if ($new_num == 0) return true; // else all bits are not unset // in the given range return false; } // Driver Code $n = 17; $l = 2; $r = 4; if (allBitsSetInTheGivenRange($n, $l, $r)) echo "Yes"; else echo "No"; // This code is contributed by Smitha ?>
Javascript
<script> // Javascript implementation to // check whether all the bits // are unset in the given range or not // function to check whether all the bits // are unset 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 let num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1); // new number which could only have one or more // set bits in the range l to r and nowhere else let new_num = n & num; // if true, then all bits are unset // in the given range if (new_num == 0) return true; // else all bits are not unset // in the given range return false; } // Driver program to test above let n = 17; let l = 2, r = 4; if (allBitsSetInTheGivenRange(n, l, r)) document.write("Yes"); else document.write("No"); </script>
Producción:
Yes
Publicación traducida automáticamente
Artículo escrito por ayushjauhari14 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA