Dado un número N y un entero K , la tarea es establecer el K-ésimo bit del número N , es decir, si el K-ésimo bit es 0, luego configúrelo en 1 y si es 1, déjelo sin cambios.
Ejemplos:
Entrada: N = 5, K = 2
Salida: 7
Explicación:
5 se representa como 101 en binario y tiene su segundo bit 0, por lo que configurarlo dará como resultado 111, es decir, 7.Entrada: N = 5, K = 1
Salida: 5
Explicación:
5 se representa como 101 en binario y su primer bit ya es 1, por lo que configurarlo dará como resultado 101, es decir, 5.
Enfoque ingenuo: un enfoque simple sería agregar el poder de los 2 si ese bit no está configurado en número. Los siguientes son los pasos para nuestra idea.
- Compruebe si el bit está establecido o no.
norte = 4, k = 1
5 -> 100
entonces, si toma el bit a bit y de N y 2 K-1 si ese bit está configurado, el resultado es 1; de lo contrario, el resultado es 0.
ya que 1 & 0 = 0 y 0 & 1 = 0
1 y 1 = 1 y 0 y 0 = 1
K = 1 -> 2 1-1 = 2 0 = 1 -> 001
N & 2 k-1 = 100 & 001 = 000, por lo que el bit no está establecido.
- Si el bit no está configurado, configure el bit agregando 2 K-1 al número.
N = 4 -> 100 , K = 2 0 = 1
norte + k = 4 +1 = 5
Entonces configuramos el bit 1 y el resultado es 5 -> 101
- Si el bit está establecido, no agregue el número.
A continuación se muestra el programa para implementar la idea anterior.
C
// Online C compiler to run C program online #include <stdio.h> #include<math.h> // Function to set Kth bit int number( int n, int k){ int x = (int)pow(2,k-1); // Checking the Kth bit is set or not if(n & x) return n; else{ return n + x; } } // Driver code int main() { int result = number(5, 2); printf("%d",result); return 0; }
7
Enfoque efectivo: el enfoque para resolver este problema se basa en la técnica de enmascaramiento de bits con la ayuda del operador OR bit a bit.
- Dado que el OR bit a bit de cualquier bit con un bit establecido da como resultado un bit establecido, es decir
Cualquier bit <O bit a bit> Establecer bit = Establecer bit
lo que significa,
0 | 1 = 1
1 | 1 = 1
- Entonces, para establecer un bit, la mejor idea es realizar un OR bit a bit del número con un bit establecido.
norte = norte | 1 << K
O
n |= 1 << K
donde K es el bit que se va a establecer
A continuación se muestra el programa C++ para implementar el enfoque anterior:
C++
// C++ program to implement the above approach #include <stdio.h> // Function to set the // kth bit of n int setBit(int N, int K) { return (N | (1 << (K - 1))); } // Driver code int main() { int N = 5, K = 2; printf("%d\n", setBit(N, K)); return 0; }
7