//題目:寫一個(gè)函數(shù)返回參數(shù)二進(jìn)制中的1的個(gè)數(shù)
// 比如:15 0000 1111 4個(gè)1
// 程序原型: int count_one_bit(unsigned int value)
// {
// //返回1的個(gè)數(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)建站主打移動(dòng)網(wǎng)站、成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(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)容與功能再?zèng)Q定采用什么樣的設(shè)計(jì)。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計(jì),我們還會(huì)規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。

上面是第一種實(shí)現(xiàn)方法,用模2、除2的方法將數(shù)字進(jìn)一步的統(tǒng)計(jì)二進(jìn)制1的個(gè)數(shù)
除此之外還可以用通過for循環(huán)來使數(shù)字在計(jì)算器中移位比特位的方法,如下:
//00000000 00000000 00000000 00001111
//00000000 00000000 00000000 00000001
//00000000 00000000 00000000 00000111
//數(shù)字進(jìn)入循環(huán)后右移0位,與1后為1,統(tǒng)計(jì)一個(gè)1,i加1,一步一步循環(huán)統(tǒng)計(jì)
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ù)字少一個(gè)1,并且每次都是少最右邊的那個(gè)1,因此我們還可以用這個(gè)方法來統(tǒng)計(jì)參數(shù)二進(jìn)制1的個(gè)數(shù):
while(n)
{
count++; //當(dāng)參數(shù)能夠進(jìn)入while循環(huán)時(shí),說明條件為真,它當(dāng)中至少有一個(gè)1,所以先統(tǒng)計(jì),
//否則統(tǒng)計(jì)結(jié)果會(huì)少一個(gè)1
n = n&(n-1);
}到這兒,可能細(xì)心的人會(huì)發(fā)現(xiàn),如果以上程序輸入-1時(shí),程序是無法執(zhí)行的,因?yàn)槲覀兘o出的原型中是無符號(hào)整型,變量的最小范圍是0到65535,而整型的變量的最小范圍為-32767到32767,要想正確統(tǒng)計(jì)-1的二進(jìn)制1,只要將函數(shù)形參改成 int n 就可以了(只適用上面與或者移位運(yùn)算的模塊程序)

如有補(bǔ)充,盡情評(píng)論指教
本文標(biāo)題:用一個(gè)函數(shù)返回參數(shù)二進(jìn)制中1的個(gè)數(shù)
當(dāng)前路徑:http://chinadenli.net/article12/ppchgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、動(dòng)態(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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)