一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - 二進(jìn)制中1的個(gè)數(shù)

二進(jìn)制中1的個(gè)數(shù)

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

這篇文章介紹了二進(jìn)制中1的個(gè)數(shù),有需要的朋友可以參考一下

前言 
最近會(huì)手寫一些??嫉拿嬖囶}目,測試通過后會(huì)跟大家分享一下

移位法
僅適應(yīng)于正數(shù)的做法:

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

復(fù)制代碼代碼如下:


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

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

    return count;   
}


對于正數(shù)沒問題,但是如果n為負(fù)數(shù),這里就出現(xiàn)問題了,以負(fù)數(shù)-8為例,二進(jìn)制補(bǔ)碼形式為11111111|11111111|11111111|11111000|,右移一位之后,變成了11111111|11111111|11111111|11111100|,因?yàn)槭秦?fù)數(shù),所以符號(hào)位會(huì)一直補(bǔ)1,導(dǎo)致最后全1,出現(xiàn)死循環(huán)

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

復(fù)制代碼代碼如下:


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

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

    return count;   
}


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

復(fù)制代碼代碼如下:


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

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

    return count;   
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲国产韩国欧美在线不卡 | 国产午夜精品久久久久 | 天堂樱桃bt在线www | 91搞搞 | 风间由美m3u8在线 | 波多野结衣中文字幕乱七八糟 | 美女被视频网站 | 国产在线伊人 | 黑人与欧洲女子性大战 | 娇妻与公陈峰姚瑶小说在线阅读 | 国产成人精品一区二三区在线观看 | 亚洲卡一卡2卡三卡4卡无卡三 | 国模李丽莎大尺度啪啪 | 欧美ay| 精品视频一区二区三区 | 日本在线www | 国外成品精品1688 | 久久国产精品免费网站 | 奇米网狠狠网 | 国产乱叫456在线 | 国色天香社区在线视频播放 | 日韩欧美中文在线 | 四虎精品视频在线永久免费观看 | 欧美一区二区三区免费高 | 高h折磨调教古代 | 日韩无砖专区2020在线 | 欧美日韩一区二区三区免费不卡 | 秋霞在线观看成人高清视频51 | 调教处男 | 视频在线观看高清免费 | 亚洲www视频| 小辣椒精品福利视频导航 | 欧美视频一区二区三区四区 | 67194最新网址| 精品一久久香蕉国产二月 | 亚洲精品动漫在线观看 | 久久机热视频 这里只有精品首页 | 91精品国产免费久久 | 91视频一区 | 双子母性本能在线观看 | 日本免费在线观看 |