📜  将给定数相除的二的最高幂

📅  最后修改于: 2021-04-23 08:01:29             🧑  作者: Mango

给定数字n,找到2的最高幂除以n。
例子:

一个简单的解决方案是从1开始依次尝试2的所有幂,然后是2,然后是4,依此类推。
一个有效的解决方案基于位魔术。如果仔细研究,我们会发现,基本上我们需要找到最右边的位与n位置相同,所有其他位都为0的数字。例如,对于n = 5(10 1 ),我们的输出是00 1 。对于n = 48(1 1 0000),我们的输出是0 1 0000
我们如何找到最右边的置位位和所有其他位都为0的数字?
我们遵循以下步骤。
设n = 48(00110000)
从n减去1,即我们做n-1 。我们得到47(00101111)
对(n-1)求反,即对〜(n-1)求反。我们得到(11010000)。
做n& (〜(n-1)) ,我们得到00010000,其值为16。
下面是上述方法的实现:

C++
// CPP program to find highest power
// of 2 that divides n.
#include
using namespace std;
 
int highestPowerOf2(int n)
{
    return (n & (~(n - 1)));
}
 
int main()
{
    int n = 48;
    cout << highestPowerOf2(n);
    return 0;
}


Java
// Java program to find highest power
// of 2 that divides n.
  
class GFG
{
      
static int highestPowerOf2(int n)
{
    return (n & (~(n - 1)));
}
  
public static void main(String []args)
{
    int n = 48;
    System.out.println(highestPowerOf2(n));
}
}


Python3
# Python3 program to find highest power
# of 2 that divides n.
 
def highestPowerOf2(n):
 
    return (n & (~(n - 1)))
 
 
#Driver code
if __name__=='__main__':
    n = 48
    print(highestPowerOf2(n))
 
# this code is contributed
# by ash264


C#
// C# program to find highest power
// of 2 that divides n.
using System;
 
class GFG
{
     
static int highestPowerOf2(int n)
{
    return (n & (~(n - 1)));
}
 
public static void Main()
{
    int n = 48;
    Console.Write(highestPowerOf2(n));
}
}
 
// This code is contributed
// by Akanksha Rai(Abby_akku)


PHP


Javascript


输出:
16