Given an integer N, the task is to print the number obtained by unsetting the least significant K bits from N.
Examples:
Input: N = 200, K=5
Output: 192
Explanation:
(200)10 = (11001000)2
Unsetting least significant K(= 5) bits from the above binary representation, the new number obtained is (11000000)2 = (192)10Input: N = 730, K = 3
Output: 720
Approach: Follow the steps below to solve the problem:
- The idea is to create a mask of the form 111111100000….
- To create a mask, start from all ones as 1111111111….
- There are two possible options to generate all 1s. Either generate it by flipping all 0s with 1s or by using 2s complement and left shift it by K bits.
mask = ((~0) << K + 1) or
mask = (-1 << K + 1)
- Finally, print the value of K + 1 as it is zero-based indexing from the right to left.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to return the value // after unsetting K LSBs int clearLastBit( int N, int K)
{ // Create a mask
int mask = (-1 << K + 1);
// Bitwise AND operation with
// the number and the mask
return N = N & mask;
} // Driver Code int main()
{ // Given N and K
int N = 730, K = 3;
// Function Call
cout << clearLastBit(N, K);
return 0;
} |
Java
// Java program for the above approach import java.util.*;
class GFG{
// Function to return the value // after unsetting K LSBs static int clearLastBit( int N, int K)
{ // Create a mask
int mask = (- 1 << K + 1 );
// Bitwise AND operation with
// the number and the mask
return N = N & mask;
} // Driver Code public static void main(String[] args)
{ // Given N and K
int N = 730 , K = 3 ;
// Function Call
System.out.print(clearLastBit(N, K));
} } // This code is contributed by shikhasingrajput |
Python3
# Python3 program for the above approach # Function to return the value # after unsetting K LSBs def clearLastBit(N, K):
# Create a mask
mask = ( - 1 << K + 1 )
# Bitwise AND operation with
# the number and the mask
N = N & mask
return N
# Driver Code # Given N and K N = 730
K = 3
# Function call print (clearLastBit(N, K))
# This code is contributed by Shivam Singh |
C#
// C# program for the above approach using System;
class GFG{
// Function to return the value // after unsetting K LSBs static int clearLastBit( int N,
int K)
{ // Create a mask
int mask = (-1 << K + 1);
// Bitwise AND operation with
// the number and the mask
return N = N & mask;
} // Driver Code public static void Main(String[] args)
{ // Given N and K
int N = 730, K = 3;
// Function Call
Console.Write(clearLastBit(N, K));
} } // This code is contributed by shikhasingrajput |
Javascript
<script> // javascript program for the above approach // Function to return the value // after unsetting K LSBs function clearLastBit(N , K)
{ // Create a mask
var mask = (-1 << K + 1);
// Bitwise AND operation with
// the number and the mask
return N = N & mask;
} // Driver Code //Given N and K var N = 730, K = 3;
// Function Call document.write(clearLastBit(N, K)); // This code contributed by shikhasingrajput </script> |
Output:
720
Time Complexity: O(1)
Auxiliary Space: O(1)