zoukankan      html  css  js  c++  java
  • n&(n-1)位运算的妙用

    一、n-1发生了什么

    ①、二进制数n,n-1后,如果最后一位是0,将向前一位借2,2-1=1。最后一位为1。如果前一位为0,将继续向前一位借2,加上本身少掉的1.则变为1。一直遇到1。减为0.

    所以 二进制 xxxx10000-1 = xxxx01111

    ②、n&n-1

    按照上述 n=xxxx10000,n-1=xxxx01111

    xxxx10000

    xxxx01111

    xxxx00000

    可以看到将原来的最左边的1变为0了。

    重复操作,有多少个1,这个操作就可以执行多少次。

    贴上实现代码

    #include <iostream>  
    #include <cstdio>  
    using namespace std;  
    int main()  
    {  
        int n, count = 0;  
        cin>>n;  
        while(n > 0)  
        {  
            count++;  
            n&=(n-1);  
        }  
        cout<<count<<endl;  
        return 0;  
    }

    原文:
    https://blog.csdn.net/nwpu_geeker/article/details/79763511

  • 相关阅读:
    AGC 014 B
    AGC 012 D
    AGC 012 C
    python
    Linux
    Linux
    Linux
    Linux 之 光标消失隐藏术
    Linux
    python
  • 原文地址:https://www.cnblogs.com/zzdbullet/p/10224642.html
Copyright © 2011-2022 走看看