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

服務(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;   
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男人机机桶女人机机 | 久热这里在线精品 | 美女和男生搞基 | 好紧好爽范冰冰系列 | 亚洲日本视频在线观看 | 女bbbxxx毛片视频 | 国产在线视频欧美亚综合 | 日本一级不卡一二三区免费 | 男女啪啪gif | 久青草国产在线观看视频 | 性欧美高清理论片 | 无限好资源第一片免费韩国 | 日韩欧美视频二区 | 好男人资源免费播放 | 精品午夜久久网成年网 | 久久国产精品人妻中文 | 男同互操 | np小说h| 国产日韩欧美在线一二三四 | 久久视频这有精品63在线国产 | 日韩亚洲欧美综合一区二区三区 | 3p文两男一女办公室高h | 国产成人在线播放视频 | 激情艳妇| 日韩二三区 | jzzjzz视频免费播放 | 草莓视频网站18勿进 | 国产午夜精品福利 | 欧美艳星kagneyiynn高清 | 深夜在线看 | 成人在线观看一区 | 456亚洲人成高清在线 | 成年人免费在线看的惊悚动作片 | 四虎影视紧急入口地址大全 | 日韩亚洲国产欧美精品 | 小草高清视频免费直播 | 大胆暴露亚洲美女xxxx | 果冻传媒mv在线观看入口免费 | 成人福利网站含羞草 | h动态图男女啪啪27报 | 日韩色综合 |