青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

旅途

如果想飛得高,就該把地平線忘掉

面試系列8--返回整數(shù)中為1的位數(shù)(優(yōu)化版)

原題:

??Write the function int bitCount(short input) that takes a short as input and
? returns an int.? The function returns the number of bits set in the input
? variable.? For instance:
? bitCount(7) --> 3
? bitCount(2543) --> 9
? bitCount(11111) --> 9

? 該題在《面試系列1...》中有解答,網(wǎng)友一修指出了答案的缺點(diǎn),并給出了另外一個(gè)效率極高的算法,非常感謝,貼出來(lái)跟大家分享。?

/*
?* 平均效率比較低,最壞情況要循環(huán)sizeof(x) * 8次。
?* 看看下面這個(gè)函數(shù),是針對(duì)32位的,至于其它位數(shù)稍加修改就可以了。
?*
?* return number of bits set
?*/

unsigned int bitcount32(unsigned int x)
{
??? x = (x & 0x55555555UL) + ((x >> 1) & 0x55555555UL); // 0-2 in 2 bits
??? x = (x & 0x33333333UL) + ((x >> 2) & 0x33333333UL); // 0-4 in 4 bits
#if 1
??? // Version 1
??? x = (x & 0x0f0f0f0fUL) + ((x >> 4) & 0x0f0f0f0fUL); // 0-8 in 8 bits
??? x = (x & 0x00ff00ffUL) + ((x >> 8) & 0x00ff00ffUL); // 0-16 in 16 bits
??? x = (x & 0x0000ffffUL) + ((x >> 16) & 0x0000ffffUL); // 0-31 in 32 bits
??? return x;
#else
??? // Version 2
??? x = (x + (x >> 4)) & 0x0f0f0f0fUL; // 0-8 in 4 bits
??? x += x >> 8; // 0-16 in 8 bits
??? x += x >> 16; // 0-32 in 8 bits
??? return x & 0xff;
#endif
}

補(bǔ)充一下:

因?yàn)榫W(wǎng)友一修給出的代碼中注釋比較少,而精煉的代碼又比較難理解,所以我來(lái)說(shuō)說(shuō)我的看法,如果有不對(duì)的地方,還請(qǐng)大家多多指導(dǎo)。

關(guān)于二進(jìn)制數(shù)的理解,二進(jìn)制數(shù)每一位只能為0和1,因此在這個(gè)地方,我們可以理解為每一位都可以表示該位中包含1的數(shù)目。

看第一行代碼:x = (x & 0x55555555UL) + ((x >> 1) & 0x55555555UL);

5的二進(jìn)制是 0101,當(dāng)x & 0x55555555UL得出的結(jié)果是保留了0, 2, 4, 6 ... , 30 位的值,即 0, 2, 4, 6 ,... , 30 位中包含1的數(shù)目;那么自然可以理解(x >> 1) & 0x55555555UL得出的結(jié)果是保留了1, 3, 5, 7, ... , 31 位的值,即 1, 3, 5, 7, ..., 31 位中包含1的數(shù)目。把兩者相加起來(lái):

??? xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

? +0101 0101 0101 0101 0101 0101 0101 0101

------------------------------------------------------------------------

??? 0x0x 0x0x 0x0x 0x0x 0x0x 0x0x 0x0x 0x0x??????????????????????????? (這里的x即為x中?0, 2, 4, ... , 30?位的值)

?

??? 0xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

? +0101 0101 0101 0101 0101 0101 0101 0101

------------------------------------------------------------------------

??? 0y0y 0y0y 0y0y 0y0y 0y0y 0y0y 0y0y 0y0y??????????????????????????? (這里的y即為x中 1, 3, 5 , ... , 31 位的值)

?

??? 0x0x 0x0x 0x0x 0x0x 0x0x 0x0x 0x0x 0x0x

? +0y0y 0y0y 0y0y 0y0y 0y0y 0y0y 0y0y 0y0y

------------------------------------------------------------------------

??? zz zz zz zz zz zz zz zz

??? 可以把32位的X數(shù)每?jī)晌豢闯梢粋€(gè)最小單元,x+y的值z(mì)即為這個(gè)兩位最小單元中,1的個(gè)數(shù)??梢钥闯?,巧妙地把兩個(gè)加數(shù)種0的空間用來(lái)保存進(jìn)位。那么到現(xiàn)在為止,我們就得到了數(shù)X中,每?jī)晌粸樽钚挝?,每?jī)晌恢械臄?shù)值表示著這兩位中1的個(gè)數(shù)。

??? 依此類推,接下來(lái)我們用同樣的方法計(jì)算以4位為最小單位,4位中的數(shù)值表示該4位中1的個(gè)數(shù),即:x = (x & 0x33333333UL) + ((x >> 2) & 0x33333333UL);

??? 然后是 8位, 16位,當(dāng)計(jì)算到以32位為最小單位,32位中的數(shù)值表示該32位中1的個(gè)數(shù)的時(shí)候,答案就揭曉了。

?

posted on 2007-09-05 01:17 旅途 閱讀(174) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品国产精品| 亚洲精品乱码久久久久久日本蜜臀| 日韩视频在线免费观看| 亚洲国产日韩在线| 欧美日韩精品免费观看视一区二区| 亚洲视频欧美视频| 欧美有码视频| 一区二区三区不卡视频在线观看| 亚洲欧美色婷婷| 亚洲国产天堂久久综合| 一区二区三区四区国产精品| 国产女主播一区二区三区| 欧美国内亚洲| 国产手机视频一区二区| 亚洲人屁股眼子交8| 国产一区二区三区在线免费观看| 亚洲精品视频一区二区三区| 国产一区二区三区在线观看视频 | 午夜精品福利在线| 久久久久99精品国产片| 一片黄亚洲嫩模| 欧美淫片网站| 午夜精品久久久久久久99樱桃| 久久久五月天| 久久国产欧美精品| 欧美天堂亚洲电影院在线播放| 噜噜噜久久亚洲精品国产品小说| 99精品视频免费| 激情五月***国产精品| 亚洲一线二线三线久久久| 国产一区视频在线观看免费| 亚洲精品一区二区三区av| 亚洲国产经典视频| 香蕉成人伊视频在线观看| 久久久久久综合网天天| 国产精品色婷婷| 国产日本欧洲亚洲| 亚洲福利视频一区二区| 美女脱光内衣内裤视频久久影院 | 老司机亚洲精品| 欧美一区二区啪啪| 国产欧美三级| 久久综合网络一区二区| 久久久综合视频| 久久影院亚洲| 国产亚洲高清视频| 欧美一区二区免费| 欧美亚洲免费在线| 欧美一乱一性一交一视频| 麻豆国产精品777777在线| 先锋影院在线亚洲| 亚洲精品黄色| 国产日韩一区二区三区在线| 久久高清一区| 亚洲精选国产| 久久爱另类一区二区小说| 亚洲精品乱码久久久久久蜜桃91| 另类激情亚洲| 亚洲嫩草精品久久| 亚洲午夜激情免费视频| 国产亚洲欧美日韩日本| 国产精品毛片a∨一区二区三区|国| 久久婷婷麻豆| 亚洲免费在线观看| 99在线精品观看| 99国产成+人+综合+亚洲欧美| 欧美大片国产精品| 亚洲国产导航| 伊人狠狠色丁香综合尤物| 亚洲欧美日韩一区二区在线 | 国内激情久久| 国产亚洲福利社区一区| 欧美黄色成人网| 先锋a资源在线看亚洲| 欧美成人精品不卡视频在线观看| 久久精品国产一区二区三区免费看 | 一本久道久久综合婷婷鲸鱼| 久久久久久久久久久久久女国产乱| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲风情在线资源站| 久久综合伊人| 久久av一区二区| 欧美成人午夜影院| 亚洲第一精品久久忘忧草社区| 欧美不卡高清| av成人天堂| 久久精品国产99国产精品澳门| 亚洲成人资源网| 欧美香蕉大胸在线视频观看| 亚洲欧美日韩在线综合| 老司机精品视频一区二区三区| 亚洲精品一二三区| 国产欧美一区二区精品秋霞影院 | 亚洲美女av网站| 国产麻豆精品在线观看| 久热国产精品视频| 亚洲在线一区二区三区| 欧美激情中文字幕乱码免费| 欧美成人情趣视频| 亚洲在线免费视频| 极品少妇一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲图片自拍偷拍| 欧美高清视频免费观看| 午夜国产精品影院在线观看| 亚洲欧美美女| 亚洲精品亚洲人成人网| 开心色5月久久精品| 亚洲综合精品| 日韩视频在线一区二区| 国产亚洲激情| 国产精品久久久久久久app| 免费日韩av| 久久激情婷婷| 亚洲欧美清纯在线制服| 日韩视频在线观看一区二区| 麻豆精品一区二区综合av| 亚洲欧美影院| 亚洲一区二区三区精品视频 | 亚洲一级在线观看| 亚洲国产一区在线| 国产一区av在线| 国产精品久久精品日日| 欧美成人亚洲| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲女爱视频在线| 国产精品99久久久久久人| 亚洲第一级黄色片| 免费看黄裸体一级大秀欧美| 久久久久久成人| 久久福利资源站| 欧美一级免费视频| 亚洲欧美国产一区二区三区| 中文高清一区| 亚洲一本大道在线| 中文亚洲视频在线| 日韩亚洲一区在线播放| 亚洲日韩欧美视频一区| 在线观看国产日韩| 曰韩精品一区二区| 亚洲国产成人av好男人在线观看| 好看的日韩视频| 黑人中文字幕一区二区三区| 国精产品99永久一区一区| 国产日韩欧美精品| 国产欧美日韩综合一区在线播放 | 久久久亚洲影院你懂的| 欧美一区二区三区四区在线观看地址 | 久热精品在线视频| 另类综合日韩欧美亚洲| 国产精品久久久久9999| 国产精品v日韩精品| 国产精品成人午夜| 国产精品嫩草99a| 国产一区视频在线看| 狠狠色综合网| 亚洲激情国产| 一区二区国产精品| 亚洲综合导航| 久久婷婷人人澡人人喊人人爽| 久久全国免费视频| 欧美成人精品1314www| 欧美成人午夜视频| 9久re热视频在线精品| 亚洲欧美国产va在线影院| 欧美一级在线视频| 欧美+日本+国产+在线a∨观看| 欧美福利一区二区| 国产精品毛片大码女人| 国产在线精品二区| 亚洲韩国一区二区三区| 日韩午夜av电影| 欧美一区观看| 欧美国产激情| 这里是久久伊人| 久久久.com| 欧美另类久久久品| 国产日韩免费| 99精品国产福利在线观看免费 | 久久免费黄色| 欧美日韩在线播放一区二区| 国产精品网曝门| 亚洲第一久久影院| 亚洲在线第一页| 美国成人直播| 亚洲视频www| 久色成人在线| 国产麻豆精品theporn| 亚洲高清色综合| 国产亚洲精品v| 最新国产成人在线观看| 午夜在线a亚洲v天堂网2018| 免费在线看成人av| 亚洲午夜国产成人av电影男同| 久久嫩草精品久久久精品一| 欧美体内谢she精2性欧美 | 亚洲少妇最新在线视频| 久久露脸国产精品| 国产精品影片在线观看| 亚洲精品国产精品乱码不99|