国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 二進制中1的個數

二進制中1的個數

2019-10-15 10:26java之家 Java教程

這篇文章介紹了二進制中1的個數,有需要的朋友可以參考一下

前言 
最近會手寫一些常考的面試題目,測試通過后會跟大家分享一下

移位法
僅適應于正數的做法:

移位法就是每次判斷n的二進制的最低位是否為1,時間復雜度為O(logn)

復制代碼代碼如下:


int nativeOnenum(int n)   
{   
    int count = 0;   

    while (n) {   
        if (n & 1)  count ++;   
        n >>= 1;   
    }   

    return count;   
}


對于正數沒問題,但是如果n為負數,這里就出現問題了,以負數-8為例,二進制補碼形式為11111111|11111111|11111111|11111000|,右移一位之后,變成了11111111|11111111|11111111|11111100|,因為是負數,所以符號位會一直補1,導致最后全1,出現死循環

針對這種情況,我們可以用變量flag =1,從右向左去和n比較,32位int最多比較32次即可知道n中1的數量

復制代碼代碼如下:


int oneNum(int n)   
{   
    int count, flag;   

    for (count = 0, flag = 1; flag; flag <<= 1) {   
        if (flag & n)   count ++;   
    }   

    return count;   
}


快速法
這種解法的思路是,二進制中1的個數只與1的位數有關,n & (n - 1)快速的去掉最左邊的1,例如7(0111) & 6(0110)= 6(0110),快速的去掉了最左邊的1

復制代碼代碼如下:


int quickOne(int n)   
{   
    int count = 0;   

    while (n) {   
        count ++;   
        n = n & (n - 1);   
    }   

    return count;   
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: www.99热| 久久久久久成人 | 在线a视频 | 久草新免费 | 激情欧美一区二区三区中文字幕 | 一级毛片免费看 | 免费的一级黄色片 | 日韩激情一区二区 | 一区二区三区av | 中文字幕国产视频 | 亚洲人视频 | 午夜视频| 最新中文字幕在线 | 日韩中文字幕在线免费观看 | 久久国内 | 一区二区三区免费 | 婷色综合 | 色网综合| 欧美综合一区 | 五月婷婷激情 | 亚洲精品视频免费在线观看 | 亚洲高清在线观看 | 欧美成人免费视频 | av一区久久 | 亚洲久草 | 精品影院| 国产视频9999 | 成人精品一区二区三区中文字幕 | 日日操天天爽 | 欧美精品一区二区三区在线 | 在线日韩成人 | 成人a在线 | 久久久国产精品视频 | 日本免费在线观看 | 国产精品1 | 在线成人免费视频 | a免费视频 | 91嫩草香蕉| 欧美日韩国产一区二区三区不卡 | 欧美性猛交一区二区三区精品 | 亚洲精品二区三区 |