//題目:寫一個函數(shù)返回參數(shù)二進(jìn)制中的1的個數(shù) // 比如:15 0000 1111 4個1 // 程序原型: int count_one_bit(unsigned int value) // { // //返回1的個數(shù) // } #include<stdio.h> #include<stdlib.h> int count_one_bit(unsigned int value) { int count = 0; int n; while(n) { if(n%2==1) count++; n = n/2; } return count; } int main() { int n = 0; int ret = 0; scanf("%d",&n); ret = count_one_bit(n); printf("%d\n",ret); system("pause"); return 0; }
運(yùn)行結(jié)果:
創(chuàng)新互聯(lián)建站主打移動網(wǎng)站、成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、域名與空間、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計,我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。
上面是第一種實(shí)現(xiàn)方法,用模2、除2的方法將數(shù)字進(jìn)一步的統(tǒng)計二進(jìn)制1的個數(shù)
除此之外還可以用通過for循環(huán)來使數(shù)字在計算器中移位比特位的方法,如下:
//00000000 00000000 00000000 00001111 //00000000 00000000 00000000 00000001 //00000000 00000000 00000000 00000111 //數(shù)字進(jìn)入循環(huán)后右移0位,與1后為1,統(tǒng)計一個1,i加1,一步一步循環(huán)統(tǒng)計 for(i=0; i<32; i++) { if(((n>>i)&1)==1) count++; }
這道題我們讓n和比它小1的數(shù)字相與,舉一些例子我們就不難發(fā)現(xiàn),每次相與之后的數(shù)字的二進(jìn)制就比n的二進(jìn)制數(shù)字少一個1,并且每次都是少最右邊的那個1,因此我們還可以用這個方法來統(tǒng)計參數(shù)二進(jìn)制1的個數(shù):
while(n) { count++; //當(dāng)參數(shù)能夠進(jìn)入while循環(huán)時,說明條件為真,它當(dāng)中至少有一個1,所以先統(tǒng)計, //否則統(tǒng)計結(jié)果會少一個1 n = n&(n-1); }
到這兒,可能細(xì)心的人會發(fā)現(xiàn),如果以上程序輸入-1時,程序是無法執(zhí)行的,因?yàn)槲覀兘o出的原型中是無符號整型,變量的最小范圍是0到65535,而整型的變量的最小范圍為-32767到32767,要想正確統(tǒng)計-1的二進(jìn)制1,只要將函數(shù)形參改成 int n 就可以了(只適用上面與或者移位運(yùn)算的模塊程序)
如有補(bǔ)充,盡情評論指教
本文標(biāo)題:用一個函數(shù)返回參數(shù)二進(jìn)制中1的個數(shù)
當(dāng)前路徑:http://chinadenli.net/article12/ppchgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、動態(tài)網(wǎng)站、商城網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)