Insertando m en n tal que m comienza en el bit j y termina en el bit i.

Nos dan dos números n y m, y posiciones de dos bits, i y j. Inserte bits de m en n comenzando desde j hasta i. Podemos suponer que los bits j a i tienen suficiente espacio para que quepa todo m. Es decir, si m = 10011, puede suponer que hay al menos 5 bits entre j e i. Por ejemplo, no tendría j = 3 e i = 2, porque m no podría caber completamente entre el bit 3 y el bit 2. 
Ejemplos: 
 

Input : n = 1024
        m = 19
        i = 2
        j = 6;
Output : n = 1100
Binary representations of input numbers
m in binary is (10011)2
n in binary is (10000000000)2
Binary representations of output number
(10000000000)2

Input : n = 5
        m = 3
        i = 1
        j = 2
Output : 7

Algoritmo: 
 

1. Clear the bits j through i in n 

2. Shift m so that it lines up with bits j through i 

3. Return Bitwise AND of m and n. 

La parte más complicada es el Paso 1. ¿Cómo borramos los bits en n? Podemos hacer esto con una máscara. Esta máscara tendrá todos 1, excepto 0 en los bits j a i. Creamos esta máscara creando primero la mitad izquierda de la máscara y luego la mitad derecha. 
A continuación se muestra la implementación del enfoque anterior.
 

C++

// C++ program for implementation of updateBits()
#include <bits/stdc++.h>
using namespace std;
 
// Function to updateBits M insert to N.
int updateBits(int n, int m, int i, int j)
{
    /* Create a mask to clear bits i through j
      in n. EXAMPLE: i = 2, j = 4. Result
      should be 11100011. For simplicity, we'll
      use just 8 bits for the example. */
 
    int allOnes = ~0; // will equal sequence of all ls
 
    // ls before position j, then 0s. left = 11100000
    int left= allOnes << (j + 1);
 
    // l's after position i. right = 00000011
    int right = ((1 << i) - 1);
 
    // All ls, except for 0s between i and j. mask 11100011
    int mask = left | right;
 
    /* Clear bits j through i then put min there */
    int n_cleared = n & mask; // Clear bits j through i.
    int m_shifted = m << i;   // Move m into correct position.
 
    return (n_cleared | m_shifted); // OR them, and we're done!
}
 
// Driver Code
int main()
{
    int n = 1024; // in Binary N= 10000000000
    int m = 19;   // in Binary M= 10011
    int i = 2, j = 6;
 
    cout << updateBits(n,m,i,j);
 
    return 0;
}

Java

// Java program for implementation of updateBits()
 
class UpdateBits
{
    // Function to updateBits M insert to N.
    static int updateBits(int n, int m, int i, int j)
    {
        /* Create a mask to clear bits i through j
          in n. EXAMPLE: i = 2, j = 4. Result
          should be 11100011. For simplicity, we'll
          use just 8 bits for the example. */
      
        int allOnes = ~0; // will equal sequence of all ls
      
        // ls before position j, then 0s. left = 11100000
        int left= allOnes << (j + 1);
      
        // l's after position i. right = 00000011
        int right = ((1 << i) - 1);
      
        // All ls, except for 0s between i and j. mask 11100011
        int mask = left | right;
      
        /* Clear bits j through i then put min there */
        // Clear bits j through i.
        int n_cleared = n & mask;
        // Move m into correct position.
        int m_shifted = m << i; 
         
        // OR them, and we're done!
        return (n_cleared | m_shifted);
    }
     
    public static void main (String[] args)
    {
        // in Binary N= 10000000000
        int n = 1024;
         
        // in Binary M= 10011
        int m = 19;  
         
        int i = 2, j = 6;
      
        System.out.println(updateBits(n,m,i,j));
    }
}

Python3

# Python3 program for implementation
# of updateBits()
 
# Function to updateBits M insert to N.
def updateBits(n, m, i, j):
 
    # Create a mask to clear bits i through
    # j in n. EXAMPLE: i = 2, j = 4. Result
    # should be 11100011. For simplicity,
    # we'll use just 8 bits for the example.
 
    # will equal sequence of all ls
    allOnes = ~0
 
    # ls before position j,
    # then 0s. left = 11100000
    left = allOnes << (j + 1)
 
    # l's after position i. right = 00000011
    right = ((1 << i) - 1)
 
    # All ls, except for 0s between
    # i and j. mask 11100011
    mask = left | right
 
    # Clear bits j through i then put min there
    n_cleared = n & mask
     
    # Move m into correct position.
    m_shifted = m << i
 
    return (n_cleared | m_shifted)
 
 
# Driver Code
n = 1024 # in Binary N = 10000000000
m = 19   # in Binary M = 10011
i = 2; j = 6
print(updateBits(n, m, i, j))
 
# This code is contributed by Anant Agarwal.

C#

// C# program for implementation of
// updateBits()
using System;
 
class GFG {
     
    // Function to updateBits M
    // insert to N.
    static int updateBits(int n, int m,
                           int i, int j)
    {
         
        /* Create a mask to clear bits i
          through j in n. EXAMPLE: i = 2,
          j = 4. Result should be 11100011.
          For simplicity, we'll use just 8
          bits for the example. */
       
        // will equal sequence of all ls
        int allOnes = ~0;
       
        // ls before position j, then 0s.
        // left = 11100000
        int left= allOnes << (j + 1);
       
        // l's after position i.
        // right = 00000011
        int right = ((1 << i) - 1);
       
        // All ls, except for 0s between i
        // and j. mask 11100011
        int mask = left | right;
       
        /* Clear bits j through i then put
        min there */
        // Clear bits j through i.
        int n_cleared = n & mask;
         
        // Move m into correct position.
        int m_shifted = m << i; 
          
        // OR them, and we're done!
        return (n_cleared | m_shifted);
    }
      
    public static void Main()
    {
         
        // in Binary N= 10000000000
        int n = 1024;
          
        // in Binary M= 10011
        int m = 19;  
        int i = 2, j = 6;
       
        Console.WriteLine(updateBits(n, m, i, j));
    }
}
 
//This code is contributed by Anant Agarwal.

PHP

<?php
// PHP program for implementation
// of updateBits()
 
// Function to updateBits
// M insert to N.
 
function updateBits($n, $m, $i, $j)
{
    // Create a mask to clear
    // bits i through j in n.
    // EXAMPLE: i = 2, j = 4.
    // Result should be 11100011.
    // For simplicity, we'll use
    // just 8 bits for the example.
 
    // will equal sequence of all ls
    $allOnes = ~0;
 
    // ls before position j, then
    // 0s. left = 11100000
    $left= $allOnes << ($j + 1);
 
    // l's after position i.
    // right = 00000011
    $right = ((1 << $i) - 1);
 
    // All ls, except for 0s between
    // i and j. mask 11100011
    $mask = $left | $right;
 
    // Clear bits j through i
    // then put min there
     
    // Clear bits j through i.
    $n_cleared = $n & $mask;
     
    // Move m into correct position.
    $m_shifted = $m << $i;
 
    // OR them, and we're done!
    return ($n_cleared | $m_shifted);
}
 
// Driver Code
 
// in Binary N= 10000000000
$n = 1024;
 
// in Binary M= 10011
$m = 19;
$i = 2;
$j = 6;
 
echo updateBits($n, $m, $i, $j);
 
// This code is contributed by Ajit
?>

Javascript

<script>
 
// JavaScript program for implementation of updateBits()
 
 
    // Function to updateBits M insert to N.
    function updateBits(n,m,i,j)
    {
        /* Create a mask to clear bits i through j
        in n. EXAMPLE: i = 2, j = 4. Result
        should be 11100011. For simplicity, we'll
        use just 8 bits for the example. */
     
        let allOnes = ~0; // will equal sequence of all ls
     
        // ls before position j, then 0s. left = 11100000
        let left= allOnes << (j + 1);
     
        // l's after position i. right = 00000011
        let right = ((1 << i) - 1);
     
        // All ls, except for 0s between i and j. mask 11100011
        let mask = left | right;
     
        /* Clear bits j through i then put min there */
        // Clear bits j through i.
        let n_cleared = n & mask;
        // Move m into correct position.
        let m_shifted = m << i;
         
        // OR them, and we're done!
        return (n_cleared | m_shifted);
    }
     
     
        // in Binary N= 10000000000
        let n = 1024;
         
        // in Binary M= 10011
        let m = 19;
         
        let i = 2, j = 6;
     
        document.write(updateBits(n,m,i,j));
     
 
// This code is contributed by sravan
 
</script>

Producción:  

 1100  // in Binary (10001001100)2

Este artículo es una contribución del Sr. Somesh Awasthi . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a contribuido@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *