您好,登錄后才能下訂單哦!
#include<iostream> using namespace std; //求二進(jìn)制中1的個(gè)數(shù):對(duì)于一個(gè)字節(jié)(8bit)的變量,要求算法的執(zhí)行效率盡可能的高 //1,對(duì)于二進(jìn)制,對(duì)2求余可得到這一位是0還是1 int count1(int v) { int num=0; while(v) { if(v%2==1) ++num; v=v/2; } return num; } //2.除2可用右移操作,提高效率,判斷一位是否為1可用與來(lái)判別 int count2(int v) { int num=0; while(v) { num+=(v&1); v>>=1; } return num; } //這個(gè)數(shù)是2的整數(shù)次冪來(lái)判斷 int count3(int v) { int num=0; while(v) { v&=(v-1); ++num; } return num; } //4.分支語(yǔ)句進(jìn)行判斷:效率低 int count4(int v) { int num=0; switch(v) { case 0: num=0; break; case 1: case 2: case 4: case 8: case 16: case 32: case 64: case 128: num=1; break; case 3: case 6: case 12: //還有別的可能 num=2; break; } return num; } //5.查表法 int countTable[256]={ 0,1,1,2,1,2, }; int count5(int v) { return countTable[v]; } int main() { cout<<count1(3)<<endl; cout<<count2(15)<<endl; cout<<count3(4)<<endl; cout<<count4(128)<<endl; cout<<count5(0)<<endl; return 0; }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。