通过操纵位使一个数递增一

给定一个非负整数 N .问题是增加 N 通过操纵 N . 例如:

null
Input : 6Output : 7Input : 15Output : 16

方法: 以下是步骤:

  1. 获取最右边未设置位的位置 属于 N .让这个职位 K .
  2. 设置n的第k位 .
  3. 切换最后的k-1位 属于 N .
  4. 最后,返回 N .

C++

// C++ implementation to increment a number
// by one by manipulating the bits
#include <bits/stdc++.h>
using namespace std;
// function to find the position
// of rightmost set bit
int getPosOfRightmostSetBit( int n)
{
return log2(n & -n);
}
// function to toggle the last m bits
unsigned int toggleLastKBits(unsigned int n,
unsigned int k)
{
// calculating a number 'num' having 'm' bits
// and all are set
unsigned int num = (1 << k) - 1;
// toggle the last m bits and return the number
return (n ^ num);
}
// function to increment a number by one
// by manipulating the bits
unsigned int incrementByOne(unsigned int n)
{
// get position of rightmost unset bit
// if all bits of 'n' are set, then the
// bit left to the MSB is the rightmost
// unset bit
int k = getPosOfRightmostSetBit(~n);
// kth bit of n is being set by this operation
n = ((1 << k) | n);
// from the right toggle all the bits before the
// k-th bit
if (k != 0)
n = toggleLastKBits(n, k);
// required number
return n;
}
// Driver program to test above
int main()
{
unsigned int n = 15;
cout << incrementByOne(n);
return 0;
}


JAVA

// Java implementation to increment a number
// by one by manipulating the bits
import java.io.*;
import java.util.*;
class GFG {
// function to find the position
// of rightmost set bit
static int getPosOfRightmostSetBit( int n)
{
return ( int )(Math.log(n & -n) / Math.log( 2 ));
}
// function to toggle the last m bits
static int toggleLastKBits( int n, int k)
{
// calculating a number 'num' having
// 'm' bits and all are set
int num = ( 1 << k) - 1 ;
// toggle the last m bits and return
// the number
return (n ^ num);
}
// function to increment a number by one
// by manipulating the bits
static int incrementByOne( int n)
{
// get position of rightmost unset bit
// if all bits of 'n' are set, then the
// bit left to the MSB is the rightmost
// unset bit
int k = getPosOfRightmostSetBit(~n);
// kth bit of n is being set
// by this operation
n = (( 1 << k) | n);
// from the right toggle all
// the bits before the k-th bit
if (k != 0 )
n = toggleLastKBits(n, k);
// required number
return n;
}
// Driver Program
public static void main (String[] args)
{
int n = 15 ;
System.out.println(incrementByOne(n));
}
}
// This code is contributed by Gitanjali.


Python 3

# python 3 implementation
# to increment a number
# by one by manipulating
# the bits
import math
# function to find the
# position of rightmost
# set bit
def getPosOfRightmostSetBit(n) :
return math.log2(n & - n)
# function to toggle the last m bits
def toggleLastKBits(n, k) :
# calculating a number
# 'num' having 'm' bits
# and all are set
num = ( 1 << ( int )(k)) - 1
# toggle the last m bits and
# return the number
return (n ^ num)
# function to increment
# a number by one by
# manipulating the bits
def incrementByOne(n) :
# get position of rightmost
# unset bit if all bits of
# 'n' are set, then the bit
# left to the MSB is the
# rightmost unset bit
k = getPosOfRightmostSetBit(~n)
# kth bit of n is being
# set by this operation
n = (( 1 << ( int )(k)) | n)
# from the right toggle
# all the bits before the
# k-th bit
if (k ! = 0 ) :
n = toggleLastKBits(n, k)
# required number
return n
# Driver program
n = 15
print (incrementByOne(n))
# This code is contributed
# by Nikita Tiwari.


C#

// C# implementation to increment a number
// by one by manipulating the bits
using System;
class GFG {
// function to find the position
// of rightmost set bit
static int getPosOfRightmostSetBit( int n)
{
return ( int )(Math.Log(n & -n) / Math.Log(2));
}
// function to toggle the last m bits
static int toggleLastKBits( int n, int k)
{
// calculating a number 'num' having
// 'm' bits and all are set
int num = (1 << k) - 1;
// toggle the last m bits and return
// the number
return (n ^ num);
}
// function to increment a number by one
// by manipulating the bits
static int incrementByOne( int n)
{
// get position of rightmost unset bit
// if all bits of 'n' are set, then the
// bit left to the MSB is the rightmost
// unset bit
int k = getPosOfRightmostSetBit(~n);
// kth bit of n is being set
// by this operation
n = ((1 << k) | n);
// from the right toggle all
// the bits before the k-th bit
if (k != 0)
n = toggleLastKBits(n, k);
// required number
return n;
}
// Driver Program
public static void Main ()
{
int n = 15;
Console.WriteLine(incrementByOne(n));
}
}
// This code is contributed by Sam007.


PHP

<?php
// PHP implementation to increment a number
// by one by manipulating the bits
// function to find the position
// of rightmost set bit
function getPosOfRightmostSetBit( $n )
{
$t = $n & - $n ;
return log( $t , 2);
}
// function to toggle the last m bits
function toggleLastKBits( $n , $k )
{
// calculating a number 'num'
// having 'm' bits and all are set
$num = (1 << $k ) - 1;
// toggle the last m bits and
// return the number
return ( $n ^ $num );
}
// function to increment a number by one
// by manipulating the bits
function incrementByOne( $n )
{
// get position of rightmost unset bit
// if all bits of 'n' are set, then the
// bit left to the MSB is the rightmost
// unset bit
$k = getPosOfRightmostSetBit(~ $n );
// kth bit of n is being set
// by this operation
$n = ((1 << $k ) | $n );
// from the right toggle all the
// bits before the k-th
if ( $k != 0)
$n = toggleLastKBits( $n , $k );
// required number
return $n ;
}
// Driver code
$n = 15;
echo incrementByOne( $n );
// This code is contributed by Mithun Kumar
?>


Javascript

<script>
// JavaScript program to increment a number
// by one by manipulating the bits
// function to find the position
// of rightmost set bit
function getPosOfRightmostSetBit(n)
{
return (Math.log(n & -n) / Math.log(2));
}
// function to toggle the last m bits
function toggleLastKBits(n, k)
{
// calculating a number 'num' having
// 'm' bits and all are set
let num = (1 << k) - 1;
// toggle the last m bits and return
// the number
return (n ^ num);
}
// function to increment a number by one
// by manipulating the bits
function incrementByOne(n)
{
// get position of rightmost unset bit
// if all bits of 'n' are set, then the
// bit left to the MSB is the rightmost
// unset bit
let k = getPosOfRightmostSetBit(~n);
// kth bit of n is being set
// by this operation
n = ((1 << k) | n);
// from the right toggle all
// the bits before the k-th bit
if (k != 0)
n = toggleLastKBits(n, k);
// required number
return n;
}
// Driver code
let n = 15;
document.write(incrementByOne(n));
</script>


输出:

16

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享